列表解析2
list comprehension(列表推倒)
列表推倒:從一個列表去產生另一個列表
案例:
#產生一個0-20的列表
nums = [n for n in range(0,21)]
#對nums進行操作,中間的每一個元組*2,構成一個新的列表
new_nums = []
for i in nums:
new_nums.append(i*2)
操作步驟:
1、定義一個new_nums的空列表
2、遍歷nums,每一個元素**2
3、對每一個元素操作後追加到new_nums列表中,最終生成列表new_nums
使用列表推倒的方法完成此工作:
new_nums = [ n * 2 for n in nums ]
每一個列表推倒都可以使用for循環地方法來實現,反之不成立。
練習:
隨機參數一個包含列表,列表中包含{1-100}範圍內任意10個數字,對這個列表進行操作,得出該10個數字內偶數的新列表。
實現代碼——
from random import randint
nums = []
for i in range(10):
nums.append(randint(1,101))
#定義一個偶數列表
even_nums = []
#通過循環,過濾偶數
for i in nums:
if i % 2 == 0:
even_nums.append(i)
通過列表推倒,改進代碼
from random import randint
nums = []
for i in range(10):
nums.append(randint(1,101))
even_nums = [n for n in nums if n %2 == 0]
print(even_nums)
進一步改進:
from random import randint
nums = [randint(1,101) for i in range(9)]
even_nums = [n for n in nums if n %2 == 0]
兩個列表合二為一
from random import randint
even_nums =[n for n in [randint(1,101) for i in range(9)] if n % 2 ==0]
這樣是不是可讀性比較差,那麽就在括號間進行換行
even_nums =\
[
n
for n in
[randint(1,101)
for i in range(9)
]
if n % 2 ==0
]
這樣是不是清晰一點了呢~
列表解析2