Python學(xué)習(xí)筆記——print()函數(shù)一行式打印容器實(shí)例

聲明

文章為本人原創(chuàng),如果您覺得閱讀后能有些許助益,實(shí)為本人榮幸。本人雖為計(jì)算機(jī)專業(yè)出身,但十多年基礎(chǔ)教育干下來真是才藝荒廢殆盡。您若發(fā)現(xiàn)文中不實(shí)之處,請(qǐng)一定不吝賜教給我留言。拜謝拜謝!

涉及知識(shí)

  • Python中常見容器的推導(dǎo)式,本文提及元組推導(dǎo)式字典推導(dǎo)式。
  • 字符串格式化的相關(guān)操作,本文涉及str.format()以及類C方式的格式化方法。

打印容器的需求

使用Python進(jìn)行編程,我們常常會(huì)遇到檢查list列表、tuple元組、set集合、或者dict字典(當(dāng)然也包括這幾種容器的派生列)的需求。最為直接的方法當(dāng)然是直接調(diào)用print()函數(shù)進(jìn)行打印:

ls = list(range(10))
print(ls)

Terminal下的運(yùn)行結(jié)果應(yīng)該為:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

但是,這些容器外嵌的符號(hào)有時(shí)并不為我們所需,又或者我們要調(diào)整輸出的效果和格式。這時(shí)就不能如此簡(jiǎn)單和隨意了。遇到這種情況,我常會(huì)使用類似于下例的編碼:

ls = range(10)

for n in ls:
  print('{}'.format(n), end=' ')

獲得的結(jié)果如下:

0 1 2 3 4 5 6 7 8 9 

如此編碼方便易懂,當(dāng)然無錯(cuò)。但如果你對(duì)于簡(jiǎn)潔性也同樣看重,那么肯定也會(huì)希望以盡量簡(jiǎn)短的方式來完成如此簡(jiǎn)單的工作。

使用元組推導(dǎo)式一行打印列表、集合或元組

我的入門書是《Learning Python The Hard Way》,記得作者有類似下例的方法來打印列表:

ls = range(10)
print(''.join('%d ' % n for n in ls))

這種方法很簡(jiǎn)潔,可能是我虛度年華后記憶衰弱,時(shí)間間隔稍久便混淆于其他語言最后竟然忘記。更重要的是隨著Python語言的發(fā)展,對(duì)于規(guī)范性和可讀性也有了更高的要求。雖然官方并沒有將這種類似于C語言printf()函數(shù)用來格式化打印字符串的語法標(biāo)記為過時(shí),但Python官方確實(shí)更為推薦使用str.format()函數(shù)來完成格式化字符串的工作。因此,我便心安理得地告訴自己可以忘記這種類C的print一行式方法,而替以基于元組推導(dǎo)式的print一行式。當(dāng)然,如果你需要打印set集合或者tuple元組,無需修改,也可以使用相同的方式完成任務(wù)。示例如下:

print(' '.join(str(n) for n in ls))

如果你在上述代碼中遍尋元組推導(dǎo)式無果,不必介意,實(shí)際上我的代碼是以下編碼的精簡(jiǎn)形式:

print(' '.join( (str(n) for n in ls) ))

這樣的形式具有很強(qiáng)的簡(jiǎn)潔性和可讀性,并且由于元組推導(dǎo)式的拓展能力,我們甚至可以對(duì)原始列表中的元素進(jìn)行過濾或選擇。請(qǐng)看下面的示例:

# 只打印ls中平方值大于30的元素
print(' '.join(str(n) for n in ls if n**2 > 30))

使用元組推導(dǎo)式一行式打印字典

如果你是Python的老玩家,只愿固守類C方式的格式化字符串方法,那么以下方式再合適不過:

dd = {
      'Name': 'John',
      'Age': 19,
      'Score': 95
     }

print('\n'.join('%s=%s' % (k, v) for k, v in dd.items()))

類似于基于列表推導(dǎo)式的一行式打印列表方式,打印dict字典的方式也可以非常簡(jiǎn)單。請(qǐng)看示例如下:

print('\n'.join('{}={}'.format(k, v) for k, v in dd.items()))

為了強(qiáng)調(diào)其元組推導(dǎo)式本質(zhì),還原代碼如下:

print('\n'.join( ('{}={}'.format(k, v) for k, v in dd.items() )))

不知道你對(duì)下面的打印結(jié)果是否滿意:

Name=John
Age=19
Score=95
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 城市的夜終于寂靜下來,此時(shí)是凌晨三點(diǎn)左右。 高空中一座20層樓高的長(zhǎng)臂吊車的剪影靜靜地等待著不久的清晨的到來,它好...
    Aealt閱讀 260評(píng)論 0 1
  • 標(biāo)題 #一級(jí)標(biāo)題##二級(jí)標(biāo)題###三級(jí)標(biāo)題 引用 >引用的句子 換行 段落內(nèi)強(qiáng)制換行:句子后兩個(gè)空格+回車 段落換...
    長(zhǎng)衫趙云閱讀 348評(píng)論 0 0
  • 提出背景 房屋房?jī)r(jià)預(yù)測(cè) 術(shù)語轉(zhuǎn)換 矩陣表示 將上房屋特征 和房?jī)r(jià) 矩陣化 將上式 轉(zhuǎn)換為矩陣乘 為什么要這么轉(zhuǎn)換呢...
    陳文瑜閱讀 468評(píng)論 0 1
  • 感激劉鳳老師對(duì)我的感激,其實(shí)我只是因?yàn)橹览蠋熕屯旰⒆踊貋砗髸?huì)繼續(xù)分享,所以選擇留在里面沒有出來。當(dāng)老師說不...
    羅秀春閱讀 354評(píng)論 0 2

友情鏈接更多精彩內(nèi)容