1. 程式人生 > >列表解析式

列表解析式

內部 code bsp 進階 spa 解析 循環 九九 語法

列表解析式

列表解析式因編譯器進行優化,提高了效率,減少出錯,增加可讀性

語法

  • [返回值 for 元素 in 可叠代對象 if條件]
  • 使用中括號[],內部是for循環,if條件語句可選
  • 返回一個新列表

示例1:

生成一個列表,元素0-9,對每一個元素自增1後求平方返回新列表

#通常寫法為:
new = []
for i in range(10):
    new.append((i+1)**2)
print(new)

#使用列表解析式方法:
new = [(i+1)**2 for i in range(10)]
print(new)

輸出結果相同:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[
1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

示例2:

獲取10以內的偶數

list = [i for i in range(10) if i % 2 == 0]

輸出結果為:

[0, 2, 4, 6, 8]

示例3:

20以內,即能被2整除又能被3整除的數

#以下兩種方法都可以
list1 = [i for i in range(20) if i % 2 == 0 if i % 3 == 0] #方法一 list2 = [i for i in range(20) if i % 2 == 0 and i % 3 == 0] #方法二

列表解析式進階

  • [返回值 for i in 可叠代對象A for j in 可叠代對象B]
  • 等價於:

      list = []

        for i in iterableA:

          for j in iterableB:

            list.append(expr)

示例1:

list1 = [(x,y) for x in "abc" for y in range(3)]
list2 = [[x,y] for x in "abc" for y in range(3)]
list3 = [{x:y} for x in "abc" for y in range(3)]

print(list1) print(list2) print(list3)

輸出為:

[(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2), (c, 0), (c, 1), (c, 2)]
[[a, 0], [a, 1], [a, 2], [b, 0], [b, 1], [b, 2], [c, 0], [c, 1], [c, 2]]
[{a: 0}, {a: 1}, {a: 2}, {b: 0}, {b: 1}, {b: 2}, {c: 0}, {c: 1}, {c: 2}]

示例2:

#以下三種輸出一樣,但推薦使用第一種方法,效率更高
list1 = [(i,j) for i in range(7) if i>4 for j in range(20,25) if j >23]
list2 = [(i,j) for i in range(7) for j in range(20,25) if i>4 if j >23]
list3 = [(i,j) for i in range(7) for j in range(20,25) if i>4 and j >23]

print(list1)
print(list2)
print(list3)

輸出結果為:

[(5, 24), (6, 24)]
[(5, 24), (6, 24)]
[(5, 24), (6, 24)]

復雜示例

返回1-10的平方列表

l1 = [ i**2 for i in range(1,11)]

有一個列表list = [1,4,9,16,2,5,10,15],生成一個新列表。要去新列表元素是lst相鄰2項的和

lst = [1,4,9,16,2,5,10,15]
l2 = [lst[i]+lst[i+1] for i in range(len(lst)-1)]

用列表解析式方法打印九九乘法表:

[print({}*{}={:<3}.format(j,i,j*i),end=\n if i == j else ‘‘) for i in range(1,10) for j in range(1,i+1)]

列表解析式