列表解析式
经常会看到类似于 [i for i in range(1,10)] 的表达式,这种表达式称为列表解析(List Comprehensions),类似的还有字典解析、集合解析等等。
列表解析式是将一个列表(实际上适用于任何可迭代对象)转换成另一个列表的工具。在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。
每个列表解析式都可以重写为 for 循环,但不是每个 for 循环都能重写为列表解析式,列表解析比 for 更精简,运行更快。
基本语法
[expression for iter_val in iterable]
[expression for iter_val in iterable if cond_expr]
列表解析式
# 列表解析式
a = [i for i in range(0,6) if i >2]
print(a)
# 普通方式
b = []
for i in range(0,6):
if i > 2:
b.append(i)
print(b)
字典解析式
# 普通方式
a = {'language1': 'python', 'language2': 'java', 'language3': 'c'}
b = {}
for key, value in a.items():
if key == 'language1':
b[key] = value
print(b)
# 字典解析式
a = {'language1':'python', 'language2':'java','language3':'c'}
b = {key: value for key, value in a.items() if key == 'language1'}
print(b)
集合解析式
# 普通方式
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 创建一个空集合
se = set()
print(type(se))
for i in s:
if i > 5:
se.add(i)
print(se)
# 集合解析式
s1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
se1 ={i for i in s if i >5}
print(se1)
大家可以看到运用这两种for循环其实是一种效果,前者减少了很多代码量,而且在数据量打的时候速度也会非常快