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

列表解析2

可讀性 包含 app 元素 清晰 pen 循環 10個 實現

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