1. 寫在前面
繼上篇,繼續(xù)在本文分享 20 個(gè) Python 單行代碼,可以在 30 秒或更短時(shí)間內(nèi)輕松學(xué)會(huì)。這些單行代碼不僅可以提高效率,同時(shí)使代碼看起來(lái)更整潔、更易讀。:)
個(gè)人博客: https://jianpengzhang.github.io/
CSDN博客: http://blog.csdn.net/u011521019
公眾號(hào): 滑翔的紙飛機(jī)
2. Python 單行代碼
2.1. 單行 for 循環(huán)
for 循環(huán)是多行語(yǔ)句,但在 Python 中,可以使用列表推導(dǎo)在一行中編寫 for 循環(huán)。例如,要過(guò)濾掉小于 250 的值,請(qǐng)看下面的代碼示例。
常規(guī)方式:
In [3]: mylist = [200, 300, 400, 500]
In [4]: result = []
In [5]: for x in mylist:
...: if x > 250:
...: result.append(x)
...:
In [6]: print(result)
[300, 400, 500]
單行方式:
In [7]: result = [x for x in mylist if x > 250]
In [8]: print(result)
[300, 400, 500]
2.2. 單行 While 循環(huán)
在一行中使用 While
循環(huán)代碼,演示兩種不同的方法。
# Method 1 單一聲明
In [9]: while True: print(1) # 無(wú)限 1
# Method 2 多重聲明
In [10]: x = 0
...: while x < 5: print(x); x= x + 1
0
1
2
3
4
2.3. 單行 if else 語(yǔ)句
單行 if else
將使用三元運(yùn)算符。三元運(yùn)算符的語(yǔ)法是"[on true] if [expression] else [on false]"
。
示例代碼中展示 3 個(gè)示例,可以清楚地了解如何在單行 if-else
語(yǔ)句中使用三元運(yùn)算符:
# Example 1: if else
In [11]: print("Yes") if 8 > 9 else print("No")
No
# Example 2: if elif else: 從右至左進(jìn)行判斷
In [15]: E = 2
In [16]: print("High") if E == 5 else print("數(shù)據(jù)STUDIO") if E == 2 else print("Low")
數(shù)據(jù)STUDIO
# Example 3: only if
In [17]: if 3 > 2: print("Exactly")
Exactly
2.4. 單行合并詞典
如何使用一行代碼將兩個(gè)字典合并為一個(gè)字典。在這里,介紹兩種合并詞典的方法:
# 單行合并詞典
In [18]: d1 = { 'A': 1, 'B': 2 }
...: d2 = { 'C': 3, 'D': 4 }
# Method1:
In [19]: d1.update(d2)
...: print(d1)
{'A': 1, 'B': 2, 'C': 3, 'D': 4}
# Method2:
In [20]: d3 = {**d1, **d2}
...: print(d3)
{'A': 1, 'B': 2, 'C': 3, 'D': 4}
2.5. 單行函數(shù)
第一種方法,使用與三元運(yùn)算符或單行循環(huán)方法相同的函數(shù)定義。
第二種方法,使用 lambda 來(lái)定義函數(shù)。
請(qǐng)看下面的示例代碼,以便更清楚地理解:
# 單行函數(shù)
# Method1:
In [21]: def fun(x): return True if x % 2 == 0 else False
...: print(fun(2))
True
# Method2:
In [22]: fun = lambda x : x % 2 == 0
In [23]: print(fun(2))
True
In [24]: print(fun(3))
False
2.6. 單行遞歸
如何在一行中使用遞歸。使用單行函數(shù)和單行 if-else 語(yǔ)句。下面是一個(gè)查找斐波那契數(shù)字的示例:
# 單行遞歸
#Fibonaci 單行遞歸示例
In [25]: def Fib(x): return 1 if x in {0, 1} else Fib(x-1) + Fib(x-2)
In [26]: print(Fib(5))
8
In [27]: print(Fib(15))
987
2.7. 單行篩選數(shù)組
使用 Python 列表推導(dǎo)方法可以在一行代碼中完成對(duì)數(shù)組的篩選。下面是一個(gè)過(guò)濾偶數(shù)列表的示例:
# 單行篩選數(shù)組
# 常規(guī)方式:
In [29]: result = []
...: for x in mylist:
...: if x % 2 == 0:
...: result.append(x)
...: print(result)
[2, 8, 12]
# 單行方式:
In [30]: result = [x for x in mylist if x % 2 == 0]
...: print(result)
[2, 8, 12]
2.8. 單行異常處理
我們使用異常來(lái)處理 Python 中的運(yùn)行時(shí)錯(cuò)誤。你知道我們可以在一行中編寫 Try except 語(yǔ)句嗎?通過(guò)使用 exec() 語(yǔ)句,我們就可以做到這一點(diǎn)。
# 在一行中處理異常
# 常規(guī)方式
In [32]: try:
...: print(x)
...: except:
...: print("Error")
...:
Error
# 單行方式
In [34]: exec('try:print(x) \nexcept:print("Error")')
Error
【注意:】謹(jǐn)慎使用 exec
、eval
, 其中 eval() 盡量用ast 模塊的 literal()替換。
2.9. 一行中將列表轉(zhuǎn)換為字典
使用 Python enumerate() 函數(shù)在一行內(nèi)將列表轉(zhuǎn)換為字典。將列表傳遞給 enumerate(),然后使用 dict() 將最終輸出轉(zhuǎn)換為字典格式。
# 單行字典
In [36]: mydict = ["John", "Peter", "Mathew", "Tom"]
...: mydict = dict(enumerate(mydict))
...: print(mydict)
{0: 'John', 1: 'Peter', 2: 'Mathew', 3: 'Tom'}
2.10. 單行多變量
Python 允許在一行中進(jìn)行多個(gè)變量賦值。下面的示例代碼將向您展示如何做到這一點(diǎn)。
# 在一行中分配多個(gè)變量。
# 單行方法
In [37]: x = 5
...: y = 7
...: z = 10
...: print(x , y, z)
5 7 10
# 單行方式
In [38]: a, b, c = 5, 7, 10
...: print(a, b, c)
5 7 10
2.11. 單行數(shù)據(jù)交換
在一行中交換值。交換值是編程中一項(xiàng)有趣的任務(wù),但它總是需要第三個(gè)變量名 temp 來(lái)保存交換值。這個(gè)單行代碼片段將告訴你如何在一行中交換值,而不需要任何臨時(shí)變量。
常規(guī)方式:
In [1]: v1 = 100
...: v2 = 200
...: temp = v1
...: v1 = v2
...: v2 = temp
...: print(v1, v2)
200 100
單行方式:
In [2]: v1, v2 = v2, v1
...: print(v1, v2)
100 200
2.12. 單行排序
排序是編程中常見的問題,Python 有許多內(nèi)置方法來(lái)解決排序問題。下面的代碼示例將展示如何用一行代碼進(jìn)行排序。
In [3]: mylist = [32, 22, 11, 4, 6, 8, 12]
# 常規(guī)方式
In [4]: mylist.sort()
...: print(mylist)
[4, 6, 8, 11, 12, 22, 32]
# 單行方式
In [5]: print(sorted(mylist))
[4, 6, 8, 11, 12, 22, 32]
2.13. 單行讀取文件
不使用語(yǔ)句或普通讀取方法,也能正確讀取文件的某一行。
# 單行讀取文件
# 常規(guī)方式
In [1]: with open("data.txt", "r") as file:
...: data = file.readline()
...: print(data)
...:
hello world
# 單行方式
In [3]: data = [line.strip() for line in open("data.txt","r")]
...: print(data)
['hello world', 'Hello Python']
2.14. 單行類
類總是多行工作。但在 Python 中,有一些方法可以在一行代碼中使用類的特性。
# 單行類
# 常規(guī)方式
In [5]: class Emp:
...: def __init__(self, name, age):
...: self.name = name
...: self.age = age
...: emp1 = Emp("a44", 22)
...: print(emp1.name, emp1.age)
a44 22
# 當(dāng)行方式
# Method 1: 帶有動(dòng)態(tài)屬性的 Lambda
In [6]: Emp = lambda:None; Emp.name = "a44"; Emp.age = 22
...: print(Emp.name, Emp.age)
a44 22
# Method 2
In [7]: from collections import namedtuple
...: Emp = namedtuple('Emp', ["name", "age"]) ("a44", 22)
...: print(Emp.name, Emp.age)
a44 22
2.15. 單行分號(hào)
在本代碼片段中,展示了如何使用分號(hào)在一行中編寫多行代碼。
In [8]: a = "Python"; b = "Programming"; c = "languages"; print(a, b, c)
Python Programming languages
2.16. 單行打印
這不是一個(gè)重要代碼片段,但有時(shí)在不需要使用循環(huán)來(lái)執(zhí)行任務(wù)時(shí),它可能會(huì)很有用。
常規(guī)方式:
In [9]: for x in range(1, 5):
...: print(x)
...:
1
2
3
4
單行方式:
In [10]: print(*range(1, 5))
1 2 3 4
In [11]: print(*range(1, 6))
1 2 3 4 5
2.17. 單行map函數(shù)
map 函數(shù)是一個(gè)有用的高階函數(shù),它可以對(duì)每個(gè)元素應(yīng)用一個(gè)函數(shù)。下面舉例說(shuō)明如何在一行代碼中使用 map 函數(shù)。
# 使用list()函數(shù),來(lái)將返回的 map 轉(zhuǎn)換成 list 列表
In [12]: print(list(map(lambda a: a + 2, [5, 6, 7, 8, 9, 10])))
[7, 8, 9, 10, 11, 12]
# 示例: 字符串列表 轉(zhuǎn)為大寫字母
In [13]: directions = ["north", "east", "south", "west"]
...: def to_upper_case(s): return s.upper() # 單行函數(shù)
...: print(list(map(to_upper_case, directions))) # 單行map處理
['NORTH', 'EAST', 'SOUTH', 'WEST']
【備注】
map(function, iterable, ...)
- function - 針對(duì)每一個(gè)迭代調(diào)用的函數(shù)
- iterable - 支持迭代的一個(gè)或者多個(gè)對(duì)象。在 Python 中大部分內(nèi)建對(duì)象,例如 lists, dictionaries, 和 tuples 都是可迭代的。
在 Python 3 中,map()返回一個(gè)與傳入可迭代對(duì)象大小一樣的 map 對(duì)象。
在 Python 2中,這個(gè)函數(shù)返回一個(gè)列表 list。
2.18. 刪除列表多個(gè)元素
使用 del 方法在一行代碼中刪除 List 中的多個(gè)元素,而無(wú)需進(jìn)行任何修改。當(dāng)然這里還有其他解決方式;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-712612.html
In [19]: mylist = [100, 200, 300, 400, 500]
...: del mylist[1::2] # 下表1開始刪除,步長(zhǎng)2,mylist[1::2] =》[200, 400]
...: print(mylist)
[100, 300, 500]
2.19. print 打印重復(fù)內(nèi)容
In [30]: print(':)' * 3)
...: print(':)' * 2)
...: print(':)' * 1)
:):):)
:):)
:)
2.20. 一行代碼就能查找某一范圍內(nèi)的質(zhì)數(shù)
如何編寫一行代碼來(lái)查找某一范圍內(nèi)的質(zhì)數(shù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-712612.html
In [31]: print(list(filter(lambda a: all(a % b != 0 for b in range(2, a)),
...: range(2,20))))
[2, 3, 5, 7, 11, 13, 17, 19]
3. 最后
感謝您花時(shí)間閱讀文章
關(guān)注公眾號(hào)不迷路:)
到了這里,關(guān)于20個(gè)非常有用的單行Python代碼片段的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!