列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。
列表生成式的結構是在一個中括號里包含一個表達式,然后是一個for語句,然后是0個或多個for或者if語句。列表表達式可以是任意的,意思是你可以在列表中放入任意類型的對象。返回結果將是一個新的列表,在這個以if和for語句為上下文的表達式運行完成之后產生
格式:
variable = [out_exp for out_exp in input_list if out_exp == 2]
練習:
1. 生成一個列表,列表元素分別為 [1*1,2*2,3*3……n*n],假設n = 10。
一般方法:
list1 = [] for i in range(1,11): list1.append(i*i)
列表生成式:
list1 = [i*i for i in range(1,11)]
2.接着上一個需求,要求返回的序列中不存在偶數項:
一般方法:
list = [] for i in range(1,11): if (i*i) % 2 !=0: list.append(i*i)
列表生成式:
list2 = [i*i for i in range(1,11) if (i*i) %2 !=0 ]
3. 字符串s1 ='ABC',字符串 s2 = '123',要求:生成序列 A1 A2 A3 B1 B2 B3 C1 C2 C3
一般方法:
s1='abc'
s2='123'
list = [] for i in s1: for o in s2: list.append(i+o) print(list)
列表生成式:
s1='abc'
s2='123'
list2 = [i+o for i in s1 for o in s2]
4. 將3x3的矩陣li1轉化成一個數組(列表),且使該數組中僅僅包含偶數:
一般方法:
list = [[1,2,3],[4,5,6],[7,8,9]] list2 = [] for b in list: for a in b: if a % 2 == 0: list2.append(a)
列表生成式:
list = [[1,2,3],[4,5,6],[7,8,9]] list2 = [a for b in list for a in b if a %2 ==0] print(list2)
5. 找出1-10之間所有的偶數,並且返回一個列表(這個列表中含以這個偶數為半徑的圓的面積)
方法一:使用列表生成式,計算圓的面積要用到圓周率參數,需要導入math模塊:
import math print([math.pi *r *r] for r in range(2,11,2))
方法二: 定義一個求圓面積的函數,然后在列表生成式中直接調用函數,從而求出序列中符合條件的半徑的面積:
import math def sour(r): res = math.pi*r*r return res print([sour(r)*r*r for r in range(2,11,2)])