列表解析式
阿新 • • 發佈:2018-08-18
內部 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)]
列表解析式