聲明
文章為本人原創(chuàng)妄迁,如果您覺(jué)得閱讀后能有些許助益疗韵,實(shí)為本人榮幸兑障。本人雖為計(jì)算機(jī)專(zhuān)業(yè)出身,但十多年基礎(chǔ)教育干下來(lái)真是才藝荒廢殆盡蕉汪。您若發(fā)現(xiàn)文中不實(shí)之處流译,請(qǐng)一定不吝賜教給我留言。拜謝拜謝者疤!
涉及知識(shí)
- Python中常見(jiàn)容器的推導(dǎo)式福澡,本文提及
元組推導(dǎo)式
和字典推導(dǎo)式
。 - 字符串格式化的相關(guān)操作宛渐,本文涉及
str.format()
以及類(lèi)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ì)使用類(lèi)似于下例的編碼:
ls = range(10)
for n in ls:
print('{}'.format(n)较锡, end=' ')
獲得的結(jié)果如下:
0 1 2 3 4 5 6 7 8 9
如此編碼方便易懂,當(dāng)然無(wú)錯(cuò)盗痒。但如果你對(duì)于簡(jiǎn)潔性也同樣看重蚂蕴,那么肯定也會(huì)希望以盡量簡(jiǎn)短的方式來(lái)完成如此簡(jiǎn)單的工作低散。
使用元組推導(dǎo)式一行打印列表、集合或元組
我的入門(mén)書(shū)是《Learning Python The Hard Way》骡楼,記得作者有類(lèi)似下例的方法來(lái)打印列表:
ls = range(10)
print(''.join('%d ' % n for n in ls))
這種方法很簡(jiǎn)潔熔号,可能是我虛度年華后記憶衰弱,時(shí)間間隔稍久便混淆于其他語(yǔ)言最后竟然忘記鸟整。更重要的是隨著Python語(yǔ)言的發(fā)展引镊,對(duì)于規(guī)范性和可讀性也有了更高的要求。雖然官方并沒(méi)有將這種類(lèi)似于C語(yǔ)言printf()函數(shù)用來(lái)格式化打印字符串的語(yǔ)法
標(biāo)記為過(guò)時(shí)篮条,但Python官方確實(shí)更為推薦使用str.format()
函數(shù)來(lái)完成格式化字符串
的工作弟头。因此,我便心安理得地告訴自己可以忘記這種類(lèi)C的print一行式方法兑燥,而替以基于元組推導(dǎo)式的print一行式亮瓷。當(dāng)然,如果你需要打印set集合
或者tuple元組
降瞳,無(wú)需修改嘱支,也可以使用相同的方式完成任務(wù)。示例如下:
print(' '.join(str(n) for n in ls))
如果你在上述代碼中遍尋元組推導(dǎo)式
無(wú)果挣饥,不必介意除师,實(shí)際上我的代碼是以下編碼的精簡(jiǎn)形式:
print(' '.join( (str(n) for n in ls) ))
這樣的形式具有很強(qiáng)的簡(jiǎn)潔性和可讀性,并且由于元組推導(dǎo)式
的拓展能力扔枫,我們甚至可以對(duì)原始列表中的元素進(jìn)行過(guò)濾或選擇汛聚。請(qǐng)看下面的示例:
# 只打印ls中平方值大于30的元素
print(' '.join(str(n) for n in ls if n**2 > 30))
使用元組推導(dǎo)式一行式打印字典
如果你是Python的老玩家,只愿固守類(lèi)C方式的格式化字符串
方法短荐,那么以下方式再合適不過(guò):
dd = {
'Name': 'John',
'Age': 19,
'Score': 95
}
print('\n'.join('%s=%s' % (k, v) for k, v in dd.items()))
類(lèi)似于基于列表推導(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é)果是否滿(mǎn)意:
Name=John
Age=19
Score=95