美文网首页
列表生成式

列表生成式

作者: Peng_001 | 来源:发表于2020-05-23 20:14 被阅读0次

参考:廖雪峰的python教程

列表生成式,List Comprehensions, 是python内置的用来创建列表类型的生成式。

想要创建一个 1-10 的列表,我们可以借助range。

list(range(1, 11))

但如果想要生成更为复杂的列表呢?

比如 1-10 各个元素的平方的列表。我们可以借助循环,将元素平方处理后,再添加到列表上。

但除了循环,列表生成式提供了一种更加简便且高效的选择。

[x * x for x in range(1, 11)]

将要生成的元素放在前面,后面再跟正常的循环类型。

我们还可以在循环后面加上条件判断,这样便可以筛选出符合特定要求的内容。

[x * x for x in range(1, 11) if x % 2 == 0]

我们还可以使用两层循环,并将结果组合起来。

[m + n for m in 'ABC' for n in 'XYZ'] # python 是支持字符串的数学运算的。

利用列表生成式可以极大简化我们的代码,用一行代码就可以对列表类型的信息进行快速的生成或列举。

import os

[d for d in os.listdir('.')]

也可以使用两个变量生成list。

d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + v for k, v in d.items()]

还可以引入新函数做额外处理。

L = ['Hello', 'World', 'IBM', 'Apple']
l = [s.lower() for s in L]

讲究的一点

需要注意的是,if...else 的用法在列表生成式中,还是尤为讲究的。

[x for x in range(1, 11) if x % 2 == 0 else 0]
[x if x % 2 == 0 for x in range(1, 11)]

上面这两行代码都会报错。

跟在for 循环后的if 不能加else,是因为此时的if 为一个筛选条件,如果带了else,无法达到筛选的目的。

而若if 在for 循环前,则if 的内容为一表达式,它必须具备完整的结构,如果没有else,则if 的内容就不完整了。

由此,在一个列表生成式中,for前面的if ... else是表达式,而for后面的if是过滤条件,不能带else。

练习

# -*- coding: utf-8 -*-
# 请修改列表生成式,通过添加if语句保证列表生成式能正确地执行:

L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [x.lower() for x in L1 if isinstance(x, str) == True]

# 测试:
print(L2)
if L2 == ['hello', 'world', 'apple']:
    print('测试通过!')
else:
    print('测试失败!')

相关文章

网友评论

      本文标题:列表生成式

      本文链接:https://www.haomeiwen.com/subject/yxllahtx.html