Python列表生成式之多層表達式

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章