python编码一直都追求简洁明了式的风格。因此,python对于常用的数据结构都提供的相关的推导式,用来简化数据结构过程的代码复杂程度。
列表推导式是最常用的一种推导式。列表推导式是通过特定格式构造列表这一数据结构的过程。
lis = [(i,j) for i in range(8) for j in range(8) if i * j % 7 == 6]
print(lis) #结果:[(1, 6), (2, 3), (3, 2), (4, 5), (5, 4), (6, 1)]
补充:
python的range()函数可用来创建一个整数列表,一般用在 for 循环中.
range()构成:range(start, stop[, step])
start: 计数从start开始,默认是从0开始(闭区间),如:range(3)等价于range(0,3)
stop: 计数到stop结束,但不包括stop(开区间).如:range(0,3)是[0, 1, 2],不包含3
step:步长,相邻两个值的差值,默认为1.如:range(0,3)等价于range(0, 3, 1)
没有range(),列表推导式的可读性和简洁性将会大打折扣。
字典推导式通过构建键值对向字典中填充内容,并生成字典对象。
strs = ['A test','something','paris']
d = {i: s for i,s in enumerate(strs)} # 创建字典
d.update({s: i for i,s in enumerate(strs)}) # 更新字典
print(d) # 结果输出:{0: 'A test', 1: 'something', 2: 'paris',
# 'A test': 0, 'something': 1, 'paris': 2}
补充:
sequence :一个序列、迭代器或其他支持迭代对象。
start :下标起始位置。
集合推导式和字典推导式十分相近,但是功能不同。主要作用:对列表中的数据进行去重。
a = {i**3 for i in [1,3,3,4,4,2,2,5,6]}
print(a) # 结果:{64, 1, 8, 216, 27, 125}
补充:
生成器推导式是用于构造简单生成器,类似于列表推导式。
lis = [1,2,3,4,5,6]
a = (i*2 for i in lis if i % 2==0)
print('a:',a) # 结果:a: at 0x000001E4F0608AF0>
print(list(a)) # 结果:[4, 8, 12]
集合推导式就是将列表推导式的[]换成{},
生成器推导式就是将列表推导式的[]换成()
字典推导式就是推导出两个值并构建成键值对的样子
推导式 | |
---|---|
列表推导式 | [ ] |
集合推导式 | { } |
生成器推导式 | ( ) |
字典推导式 | 键值对 |