Python3-推导式
- 推导式(又称解析式)提供了一种简明扼要的方法来创建列表、字典、集合,适用于列表、字典、集合等可迭代数据结构(iterables)。
- 它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。
- 执行顺序是依次往后执行(for-->for/if-->for/if......)
一、列表推导式
1、只有一个for循环
l = [1, 2, 3, 4, 5]
ls = [x * 2 for x in l]
# 执行结果:[2, 4, 6, 8, 10]
# 执行顺序:
for x in l:
x * 2
2、带if判断
ls = [x * 2 for x in l if x > 3]
# 执行结果:[8, 10]
# 执行顺序:
for x in l:
if x > 3:
x * 2
3、多个for
ls = [x * y for x in l for y in range(5)]
# 执行结果:[0, 1, 2, 3, 4, 0, 2, 4, 6, 8, 0, 3, 6, 9, 12, 0, 4, 8, 12, 16, 0, 5, 10, 15, 20]
# 执行顺序:
for x in l:
for y in range(5):
x * y
4、多个for和一个if判断
ls = [x * y for x in l for y in range(5) if x > 3]
# 执行结果:[0, 4, 8, 12, 16, 0, 5, 10, 15, 20]
# 执行顺序:
for x in l:
for y in range(5):
if x > 3:
x * y
5、多个for多个if
ls = [x * y for x in l for y in range(5) if x > 3 if y > 3]
# 执行结果:[16, 20]
# 执行顺序:
for x in l:
for y in range(5):
if x > 3:
if y > 3:
x * y
从for循环演变成列表推导式
for循环:
ls = []
for n in range(1, 5):
for m in range(1, n + 1):
ls.append(n * m)
# [1, 2, 4, 3, 6, 9, 4, 8, 12, 16]
列表推导式:
ls = [n * m for n in range(1, 5) for m in range(1, n + 1)]
# [1, 2, 4, 3, 6, 9, 4, 8, 12, 16]
二、字典推导式
把一个字典的key和value互换:
dict1 = {'s1': 'a ', 's2': 'b', 's3': 'c'}
changed = {value: key for key, value in dict1.items()}
print(changed)
# =======运行结果
# {'a ': 's1', 'b': 's2', 'c': 's3'}
三、集合推导式
跟列表推导式不同的是列表是[],集合是{},集合中不允许有重复数据
# 集合推导式
s = {x**2 for x in [1, 1, 2]}
print(s) # {1, 4}
print(type(s)) # <class 'set'>
# 列表推导式
s1 = [x ** 2 for x in [1, 1, 2]]
print(s1) # [1, 1, 4]
print(type(s1)) # <class 'list'>