您好,登錄后才能下訂單哦!
這篇文章給大家介紹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))
單個(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'
我們可以看到,在拼接單個(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#/
url<-"http://study.163.com/category/400000000146050#/?p="
num<-1:22
myurl<-paste(url,num,sep="");myurl
myurl<-paste0(url,num);myurl
對(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 = "")
在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ù)。
接下來(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","馬云","老板")
'馬云是阿里巴巴的老板'
當(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')
這種情況下你也不必考慮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)
myurl1=[]
for i in range(1,23):
urlm=url+'{}'.format(i)
myurl1.append(urlm)
print(urlm)
好了今天就這樣了,要同時(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ò),可以把它分享出去讓更多的人看到。
免責(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)容。