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

 

posted @ 2017-06-15 01:56  alben-xue  阅读(196)  评论(0编辑  收藏  举报