for循環可以嵌套,因此,在列表生成式中,也可以用多層 for 循環來生成列表。
對於字符串 'ABC' 和 '123',可以使用兩層循環,生成全排列:
>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
翻譯成循環代碼就像下面這樣:
L = []
for m in 'ABC':
for n in '123':
L.append(m + n)
練習:利用 3 層for循環的列表生成式,找出對稱的 3 位數。例如,121 就是對稱數,因爲從右到左倒過來還是 121。
代碼參考:
#coding:utf-8
#對於字符串 'ABC' 和 '123',可以使用兩層循環,生成全排列:
L = []
for x in 'ABC':
for y in '123':
L.append(x + y)
print("for循環結果:", L)
#使用多層表達式
L1 = [x + y for x in 'ABC' for y in '123']
print("列表生成式結果:", L1)
#利用 3 層for循環的列表生成式,找出對稱的 3 位數。例如,121 就是對稱數,因爲從右到左倒過來還是 121
#方法一:多重for循環
L2=[]
for x in range(1, 10):
for y in range(10):
for z in range(1, 10):
if x==z :
L2.append(100*x+10*y+z)
print("方法一結果:", L2)
#方法二:多層列表生成式
L3 = [100 * x + 10 * y + z for x in range(1, 10) for y in range(10) for z in range(10) if x == z]
print("方法二結果:", L3)
#方法三:索引
L4 = [i for i in range(100, 1000) if str(i)[0] == str(i)[-1]]
print("方法三結果:", L4)
#方法四:切片
L5 = [i for i in range(100, 1000) if str(i)[:1] == str(i)[-1:]]
print("方法四結果:", L5)