1 平方列表
如果你想創(chuàng)建一個包含1到10的平方的列表,你可以這樣做:
squares = []for x in range(10): squares.append(x**2)
這是一個簡單的例子,但是使用列表生成式可以更簡潔地創(chuàng)建這個列表。
squares = [x**2 for x in range(10)]
這個最簡單的列表生成式由方括號開始,方括號內(nèi)部先是一個表達式,其后跟著一個for語句。列表生成式總是返回一個列表。
2 整除3的數(shù)字列表
通常,你可能這樣寫:
numbers = []for x in range(100): if x % 3 == 0: numbers.append(x)
你可以在列表生成式里包含一個if語句,來有條件地為列表添加項。為了創(chuàng)建一個包含0到100間能被3整除的數(shù)字列表,可以使用列表推導(dǎo)式:
numbers = [x for x in range(100) if x % 3 == 0]
3 找出質(zhì)數(shù)
這通常要使用好幾行代碼來實現(xiàn)。
noprimes = []for i in range(2, 8): for j in range(i*2, 50, i): noprimes.append(j)primes = []for x in range(2, 50): if x not in noprimes: primes.append(x)
不過,你可以使用兩個列表生成式來簡化代碼。
noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]primes = [x for x in range(2, 50) if x not in noprimes]
第一行代碼在一個列表生成式里使用了多層for循環(huán)。第一個循環(huán)是外部循環(huán),第二個循環(huán)是是內(nèi)部循環(huán)。為了找到質(zhì)數(shù),我們首先找到一個非質(zhì)數(shù)的列表。通過找出2-7的倍數(shù)來產(chǎn)生這個非質(zhì)數(shù)列表。然后我們循環(huán)遍歷數(shù)字并查看每個數(shù)字是否在非質(zhì)數(shù)列表。
修正:正如reddit上的shoyer指出的,使用集合(set)來查找noprimes(代碼里的屬性參數(shù),譯者注)效率更高。由于noprimes應(yīng)該只包含唯一的值,并且我們頻繁地去檢查一個值是否存在,所以我們應(yīng)該使用集合。集合的使用語法和列表的使用語法類似,所以我們可以這樣使用:
noprimes = set(j for i in range(2, 8) for j in range(i*2, 50, i))primes = [x for x in range(2, 50) if x not in noprimes]
4 嵌套列表降維
假設(shè)你有一個列表的列表(列表里包含列表)或者一個矩陣,
matrix = [[0,1,2,3], [4,5,6,7], [8,9,10,11]]
并且你想把它降維到一個一維列表。你可以這樣做:
flattened = []for row in matrix: for i in row: flattened.append(i)
使用列表生成式:
flattened = [i for row in matrix for i in row]
這使用了兩個for循環(huán)去迭代整個矩陣。外層(第一個)循環(huán)按行迭代,內(nèi)部(第二個)循環(huán)對該行的每個項進行迭代。
新聞熱點
疑難解答
圖片精選