溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python中怎么格式化輸出字符串

發(fā)布時(shí)間:2021-07-02 15:31:03 來(lái)源:億速云 閱讀:295 作者:Leah 欄目:大數(shù)據(jù)

這篇文章給大家介紹Python中怎么格式化輸出字符串,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

paste和paste0都可以完成單個(gè)向量字符串的連接以及兩個(gè)向量間的匹配。

#生成10個(gè)隨機(jī)大寫(xiě)字母作為案例:

myword<-sample(LETTERS,10,replace=FALSE)

我們可以打印出兩個(gè)函數(shù)的詳細(xì)參數(shù)表:

paste

function (..., sep = " ", collapse = NULL) #sep參數(shù)默認(rèn)間隔為空格

.Internal(paste(list(...), sep, collapse))

paste0

function (..., collapse = NULL)           #sep沒(méi)有間隔參數(shù)(無(wú)間隔)

.Internal(paste0(list(...), collapse))

Python中怎么格式化輸出字符串

單個(gè)向量的連接成字符串:

paste(myword,collapse="-")

'Q-C-X-B-M-I-E-P-G-V'

在拼接單個(gè)向量之時(shí),通過(guò)設(shè)置collapse參數(shù)來(lái)控制字符之間的間隔符,最終輸出一個(gè)單值字符串。

paste0(myword,collapse="-")

'Q-C-X-B-M-I-E-P-G-V'

Python中怎么格式化輸出字符串

我們可以看到,在拼接單個(gè)向量為字符串的過(guò)程中,paste和paste0兩個(gè)函數(shù)并無(wú)太大區(qū)別,因?yàn)椴簧婕捌ヅ鋮?shù)sep。

通常情況下,我們使用paste和paste0做向量間的匹配情況比較多,這種情況多見(jiàn)于遍歷網(wǎng)頁(yè),遍歷日期等。

比如假如我們們要遍歷一個(gè)網(wǎng)頁(yè)的網(wǎng)址如下:

隨機(jī)打開(kāi)了網(wǎng)易云課堂的一個(gè)課程欄目,看到一共有22頁(yè)課程,此時(shí)最簡(jiǎn)單的遍歷網(wǎng)頁(yè)方法就是通過(guò)paste或者paste0。

http://study.163.com/category/400000000146050#/

Python中怎么格式化輸出字符串

url<-"http://study.163.com/category/400000000146050#/?p="

num<-1:22

myurl<-paste(url,num,sep="");myurl

myurl<-paste0(url,num);myurl

Python中怎么格式化輸出字符串

Python中怎么格式化輸出字符串

對(duì)比兩個(gè)函數(shù)的用法,大家應(yīng)該能領(lǐng)會(huì)其中的差別了吧,paste0把paste的sep參數(shù)簡(jiǎn)化了,直接強(qiáng)制設(shè)定為無(wú)間隔,此時(shí)做向量間匹配的話,paste0函數(shù)就可以不用設(shè)置sep參數(shù),而paste則需設(shè)置,當(dāng)然雖然在遍歷網(wǎng)頁(yè)時(shí)確實(shí)節(jié)省代碼,但也不是任何場(chǎng)合都是如此。

比如我要拼接時(shí)間與日期,而且要求以“-”間隔,此時(shí)你還是需要使用傳統(tǒng)的paste函數(shù)來(lái)完成這個(gè)任務(wù),因?yàn)閜aste0已經(jīng)不存在sep參數(shù)了。

mydate<-paste(2001:2005,"06",sep="-");mydate

還有一個(gè)stringr包中字符串拼接函數(shù)str_sub()也可以高效的完成上述工作,但是因?yàn)樾枰~外加載包,所以平時(shí)我用的頻率不高。

library(stringr)

str_c(myword,collapse ="")

str_c(url,num,sep = "")

Python中怎么格式化輸出字符串

在R語(yǔ)言中,字符串格式化輸出除了以上常見(jiàn)操作之外,還有一些非常重要的需求,比如格式化輸出百分比,格式化輸出日期時(shí)間等。

以百分比為例:

我們可以通過(guò)一些擴(kuò)展包內(nèi)提供的百分比構(gòu)造函數(shù)來(lái)高效的完成百分比構(gòu)造過(guò)程。

library(sca)

library(dplyr)

percent(seq(0,0.1,0.01),d=2,sep="") #其中的參數(shù)控制百分比輸出的小數(shù)點(diǎn)后位數(shù)。

library(scales)

percent(runif(10,0,1))         #percent函數(shù)說(shuō)明了目前沒(méi)法看到如何控制小數(shù)點(diǎn)顯式位數(shù)。

Python中怎么格式化輸出字符串

接下來(lái)跟大家介紹一個(gè)重量級(jí)的函數(shù)——sprintf。此函數(shù)據(jù)說(shuō)來(lái)頭不小。(據(jù)說(shuō)繼承自C/C++),該函數(shù)的使用可以大大簡(jiǎn)化字符串格式化輸出的操作流程。

%d 整數(shù)    %02d   d代表整數(shù);2代表長(zhǎng)度;0代表不足長(zhǎng)度用0補(bǔ)齊

%f 浮點(diǎn)數(shù)  %4.2f  第一個(gè)數(shù)字代表總位數(shù);第二個(gè)數(shù)字代表小數(shù)點(diǎn)位數(shù) 

%s 字符串 

%% 百分比

該函數(shù)的參數(shù)遠(yuǎn)不止這三個(gè),太多我也記不住,而且平時(shí)使用頻率最高的也就這三個(gè),所以秉著投入回報(bào)率最高的原則,建議大家用什么記什么。

所以以上百分比過(guò)程便只剩下這么幾個(gè)代碼:

sprintf("%d%%",1:10) #遍歷百分比

sprintf("%d-%d-%02d",2001,12,1:30) #遍歷日期:

sprintf("有%.1f%%的人評(píng)價(jià)變形金剛5較差",30.7)

'有30.7%的人評(píng)價(jià)變形金剛5較差'   

sprintf("%s是阿里巴巴的%s","馬云","老板")

'馬云是阿里巴巴的老板'

Python中怎么格式化輸出字符串

Python中怎么格式化輸出字符串

當(dāng)然,以上過(guò)程完全可以通過(guò)paste和str_c函數(shù)完成,只是sprintf函數(shù)來(lái)寫(xiě)這些東西看起來(lái)更優(yōu)化,更有逼格。

好了重于輪到Python了,對(duì)于一個(gè)小菜鳥(niǎo)來(lái)說(shuō),第一次寫(xiě)Pyhon的教程心情很忐忑,注意了下面要換編輯器了(雖然仍然使用的jupter里)。

Pyhton:

Pyhton中的字符串格式化輸出大概有兩套比較完善的系統(tǒng)(我所知的)。

  • 格式化符號(hào):%s/d/f……

  • .format模式

其實(shí)第一套系統(tǒng)應(yīng)該也是源于C/C++(感覺(jué)跟R里面的格式化符號(hào)規(guī)則是一致的)

print("I'm %s. I'm %d year old" % ('raindu',26))

以上使用print函數(shù)輸出了寶寶的大名和芳齡~_~,python中的字符串格式符規(guī)則是,在要輸出的主句中對(duì)應(yīng)位置插入格式符,在句尾之后使用 % 連接一個(gè)元組,元組內(nèi)提供主句所有的待格式化的字符串,有幾個(gè)需要格式化的字符串就需要在元組中提供幾個(gè)字符串對(duì)象,而且順序一定要與待格式化的字符串在主句的位置一一對(duì)應(yīng)。

另一種方式可以使用字典進(jìn)行字符傳遞。 

print("I'm %(name)s. I'm %(age)d year old" % {'age':26,'name':'raindu'})

這種方式最大的好處就是,以命名參數(shù)的形式傳入,這樣可以不用考慮字典內(nèi)的鍵值對(duì)順序。(因?yàn)橛忻挚梢运饕?/p>

Python中的字符串格式化符號(hào)相對(duì)于R規(guī)定的更加嚴(yán)格、細(xì)致,上述所述R中的字符串:%s、數(shù)值%d、浮點(diǎn)型%f是通用的。

除此之外,格式化符號(hào)內(nèi)部還可以提供更為詳盡的格式控制。

%[(name)][flags][width].[precision]typecode

(name)為名稱(chēng)

flags可以有+,-,' '或0。+表示右對(duì)齊。-表示左對(duì)齊。' '為一個(gè)空格,表示在正數(shù)的左側(cè)填充一個(gè)空格,從而與負(fù)數(shù)對(duì)齊。0表示使用0填充。

width表示顯示寬度

precision表示小數(shù)點(diǎn)后精度

但是發(fā)現(xiàn)網(wǎng)上關(guān)于Python教程中,使用最多的還是.format這種字符串輸出形式。

format 函數(shù):

'{2},{1},{0}'.format("小偉","大偉","小三")

'小三,大偉,小偉'

'{1}和{0}是一對(duì){2}'.format("大偉","小偉","基友")

'小偉和大偉是一對(duì)基友'

這種傳參的方式可以看做是位置參數(shù)(順序),即在要輸出的主句中插入末尾提供的對(duì)應(yīng)字符串位置,即可完成格式化過(guò)程。

如果你不想在主句對(duì)應(yīng)的花括號(hào)內(nèi)寫(xiě)位置參數(shù),你必須保證末尾提供的字符串順序與主句對(duì)應(yīng)要插入的位置保持一致。

'{}和{}是一對(duì)好{}'.format("大偉","小偉","基友")

當(dāng)然,你也可以在format括號(hào)內(nèi)內(nèi)對(duì)字符串進(jìn)行命名,然后將對(duì)應(yīng)名字傳入主句對(duì)應(yīng)花括號(hào)內(nèi)部。

"I'm {name}. I'm {age} year old".format(age=26,name='raindu')

Python中怎么格式化輸出字符串

這種情況下你也不必考慮format括號(hào)內(nèi)的字符串對(duì)應(yīng)順序,因?yàn)樗械淖址加忻Q(chēng),只傳入名稱(chēng),函數(shù)即可自動(dòng)完成索引配對(duì)。

使用以上兩種方式都可以方便的遍歷網(wǎng)頁(yè):

url="http://study.163.com/category/400000000146050#/?p="

myurl1=[]

for i in range(1,23):

    urlm=url+'%d' % i

    myurl1.append(urlm)

    print(urlm)

Python中怎么格式化輸出字符串

myurl1=[]

for i in range(1,23):

    urlm=url+'{}'.format(i)

    myurl1.append(urlm)

    print(urlm)

Python中怎么格式化輸出字符串

好了今天就這樣了,要同時(shí)貫穿兩門(mén)語(yǔ)言真的不是一件容易的事情,長(zhǎng)路漫漫以后日子要苦逼了。

總結(jié)一下:

R語(yǔ)言字符串格式化輸出:

paste/paste0

stringr::str_c

sca::percent

scales::percent

sprintf

Python字符串格式化輸出:

  • 格式化符號(hào):%d/%s/%f等(規(guī)則與R中的sprintf大體一致)

  • .format格式化輸出:

關(guān)于Python中怎么格式化輸出字符串就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI