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
]
这样是不是清晰一点了呢~