自從我用Python編寫第一行代碼以來(lái),我就被它的簡(jiǎn)單性、出色的可讀性和特別流行的一行代碼所吸引。在下面,我想介紹并解釋其中一些一行程序—可能有一些您還不知道,但對(duì)您的下一個(gè)Python項(xiàng)目很有用。
1.交換兩個(gè)變量
# a = 1; b = 2
a, b = b, a
# print(a,b) >> 2 1
讓我們從一個(gè)經(jīng)典的開(kāi)始:通過(guò)簡(jiǎn)單地交換賦值位置來(lái)交換變量的值——在我看來(lái),這是最直觀的方法。不需要使用臨時(shí)變量。它甚至適用于兩個(gè)以上的變量。
2.多個(gè)變量賦值
a, b, *c = [1,2,3,4,5]
# print(a,b,c) >> 1 2 [3, 4, 5]
交換變量實(shí)際上是python能夠一次分配多個(gè)變量的一種特殊情況。在這里,您可以使用它將列表元素分配給給定的變量,這也稱為解表。*將再次打包剩下的值,這將導(dǎo)致c的子列表。它甚至可以用于*的其他位置(例如列表的開(kāi)始或中間部分)。
3.對(duì)列表每隔兩個(gè)元素求和
# a = [1,2,3,4,5,6]
s = sum(a[1::2])
# print(s) >> 12
這里不需要特殊的reduce函數(shù),sum只是添加每個(gè)給定迭代的項(xiàng)。這里使用擴(kuò)展的切片語(yǔ)法[::]來(lái)返回第二個(gè)元素。你可以將它讀為[start: stop: step],所以[1::2]翻譯為從索引1的元素開(kāi)始(第二個(gè)元素),直到列表結(jié)束(第二個(gè)參數(shù)沒(méi)有給出參數(shù)),并且總是采取兩步。
4.刪除列表多個(gè)元素
# a = [1,2,3,4,5]
del a[::2]
# print(a) >> [2, 4]
擴(kuò)展的切片語(yǔ)法也可以用來(lái)一次刪除多個(gè)列表元素。
5.將文件讀入行數(shù)組
c = [line.strip() for line in open('file.txt')]
# print(c) >> ['test1', 'test2', 'test3', 'test4']
使用python內(nèi)聯(lián)for循環(huán),您可以輕松地將文件讀入行數(shù)組中。需要使用strip()來(lái)刪除后面的斷線。如果你想保留它們或者它們對(duì)你來(lái)說(shuō)不重要,你可以用更短的一行字:
c = list(open('file.txt'))
# print(c) >> ['test1n', 'test2n', 'test3n', 'test4n']
在Python中讀取文件真的很簡(jiǎn)單。附注:如果愿意,還可以使用readlines()方法。
6.將字符串寫入文件
with open('file.txt', 'a') as f: f.write('hello world')
# print(list(open('file.txt'))) >> ['test1n', 'test2n', 'test3n', 'test4n', 'hello world']
在With語(yǔ)句的幫助下,您可以直接將內(nèi)容寫入文件。確保使用正確的模式打開(kāi)文件(這里“a”表示附加內(nèi)容)。
7.創(chuàng)建列表
l = [('Hi ' + x) ?for? x ?in? [?'Alice'?, ?'Bob'?, ?'Pete'?]]
# print(l) >> ['Hi Alice', 'Hi Bob', 'Hi Pete']
可以使用內(nèi)聯(lián)for循環(huán)從其他列表動(dòng)態(tài)創(chuàng)建列表。您可以直接修改值,就像本例中的字符串連接一樣。
8.列表映射
l = list(map(int, ['1', '2', '3']))
# print(l) >> [1, 2, 3]
還可以使用Pythons map()函數(shù)將每個(gè)列表元素強(qiáng)制轉(zhuǎn)換為另一種類型。
9.集合創(chuàng)建
squares = { x**2 for x in range(6) if x < 4 }
# print(squares) >> {0, 1, 4, 9
集合也是一樣的。除了內(nèi)聯(lián)for循環(huán)之外,您甚至可以直接添加條件!
10.回文檢查
# phrase = 'deleveled'
isPalindrome = phrase == phrase[::-1]
# print(isPalindrome) >> true
回文是一系列向前和向后讀取相同的字符。如果給定字符串是回文,通常需要一些循環(huán)和條件來(lái)檢查。在Python中,你只需要比較字符串和它的反向字符串。除了使用切片操作符[::-1]之外,您還可以使用reverse()函數(shù)來(lái)反轉(zhuǎn)字符串。
英文原文:
https://dev.to/devmount/10-awesome-pythonic-one-liners-explained-3doc