串列推導式是Python構建串列(list)的一種快捷方式,可以使用簡潔的代碼就創建出一個串列.
舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):
print( list(range(1, 11)))
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是回圈:
li = []
for i in range(1, 11):
li.append(i * i)
print(li)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是回圈太繁瑣,而串列生成式則可以用一行陳述句代替回圈生成上面的list:
print([x * x for x in range(1, 11)])
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
寫串列生成式時,把要生成的元素x * x放到前面,后面跟for回圈,就可以把list創建出來,十分有用,多寫幾次,很快就可以熟悉這種語法,
for回圈后面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
print([x * x for x in range(1, 11) if x % 2 == 0])
# [4, 16, 36, 64, 100]
但是,我們不能在最后的if加上else:
print([x for x in range(1, 11) if x % 2 == 0 else 0])
'''
File "D:/python_project/mxxl/test/test.py", line 1
print([x for x in range(1, 11) if x % 2 == 0 else 0])
^
SyntaxError: invalid syntax
'''
這是因為跟在for后面的if是一個篩選條件,不能帶else,否則如何篩選?
另外,if寫在for前面必須加else,否則報錯:
[x if x % 2 == 0 for x in range(1, 11)]
'''
File "D:/python_project/mxxl/test/test.py", line 1
[x if x % 2 == 0 for x in range(1, 11)]
^
SyntaxError: invalid syntax
'''
這是因為for前面的部分是一個運算式,它必須根據x計算出一個結果,因此,考察運算式:x if x % 2 == 0,它無法根據x計算出結果,因為缺少else,必須加上else:
print([x if x % 2 == 0 else -x for x in range(1, 11)])
# [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
上述for前面的運算式x if x % 2 == 0 else -x才能根據x計算出確定的結果,
可見,在一個串列生成式中,for前面的if ... else是運算式,而for后面的if是過濾條件,不能帶else,
還可以使用兩層回圈,可以生成全排列:
print([m + n for m in 'ABC' for n in 'XYZ'])
# [m + n for m in 'ABC' for n in 'XYZ']
但是,三層和三層以上的回圈就很少用到了,
其實for回圈可以同時使用兩個甚至多個變數,比如dict的items()可以同時迭代key和value:
d = {'x': 'A', 'y': 'B', 'z': 'C' }
for k, v in d.items():
print(k, '=', v)
# x = A
# y = B
# z = C
因此,串列生成式也可以使用兩個變數來生成list:
d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k + '=' + v for k, v in d.items()])
# ['x=A', 'y=B', 'z=C']
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276559.html
標籤:Python
上一篇:如何在Python中獲取當前時間
下一篇:jdbc資料庫連接方式迭代
