python推导式创建序列 列表推导式 字典推导式 集合推导式 生成器推导式

1,列表推导式生成列表对象

语法为:
[表达式 for item in 可迭代对象]
或者:
[表达式 for item in 可迭代对象 if 条件判断]

>>> [a for a in range(1,5)]
[1, 2, 3, 4]
>>> [x*2 for x in range(1,5)]
[2, 4, 6, 8]
>>> [x*2 for x in range(1,20) if x%5==0]
[10, 20, 30]
>>> [a*2 for a in "abcdefg"]
['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg']

>>>cells=[(row,col) for row in range(1,10) for col in range(1,10)]
>>> print(cells)  					#运行结果如下所示
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]
list = [a+b for a in "123" for b in "xyz"]
print(list)

运行结果为:

['1x', '1y', '1z', '2x', '2y', '2z', '3x', '3y', '3z']
list = [x for x in range(11) if x%2 == 0]
print(list)

运行结果为:

[0, 2, 4, 6, 8, 10]

示例代码如下:

names=['anne','beth','jack','peter']
ages=[12,34,23,15]
print(list(zip(names,ages)))

运行结果为:

[('anne', 12), ('beth', 34), ('jack', 23), ('peter', 15)]

列表推导式可更加便捷的生成列表

需要注意的是:当range里面的值特别大的时候,会非常占用系统内存。那么此时用生成器推导式会非常节约时间

可查看我的另一篇文章关于 生成器的具体介绍
(https://blog.csdn.net/weixin_45222544/article/details/94123503)
**

2,字典推导式

**
字典推导式生成字典对象的格式如下:

{key_expression : value_expression for 表达式 in 可迭代对象 }

注:也可以增加if条件判断 和 多个for循环

统计文本中字符出现的次数:

>>> txt = "i love you, i love pipi, i love wangpipi"
>>> char_count = {a:txt.count(a) for a in txt}
>>> print(char_count)
{'i': 7, ' ': 8, 'l': 3, 'o': 4, 'v': 3, 'e': 3, 'y': 1, 'u': 1, ',': 2, 'p': 4, 'w': 1, 'a': 1, 'n': 1, 'g': 1}

**

3,集合推导式

**
语法为:
{表达式 for item in 可迭代对象}
或者:
{表达式 for item in 可迭代对象 if 条件判断}

>>> {a for a in range(1,100) if a%9 == 0} 				#集合的特点是不可重复
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}

示例如下:

list1 = ["name", "bb", "age"]
list2 = ["pipi", "aa", "cc"]

id1 = {x:y for x,y in zip(list1, list2)}
print("id1的输出结果为", id1)

id2 = {x:y for x in list1 for y in list2}
print("id2的输出结果为", id2)

运行结果为:

id1的输出结果为 {'name': 'pipi', 'bb': 'aa', 'age': 'cc'}
id2的输出结果为 {'name': 'cc', 'bb': 'cc', 'age': 'cc'}

关于zip并行迭代的具体用法,可参考我的另一篇短小精悍的文章。(文章虽短 知识满满呦)
(https://blog.csdn.net/weixin_45222544/article/details/92651569)

**

4,生成器推导式(生成元组)

**

>>> (x for x in range(1,100) if a%9 == 0)   			#回车之后可以发现提示的是一个“生成器对象” 所以元组没有推导式
<generator object <genexpr> at 0x0000026D6F32CFC0>

一个生成器只能运行一次,第一次迭代可以得到数据,第二次迭代数据已经没有了。

>>> x = (a for a in range(1,100) if a%9 == 0)
>>> for i in x:
	print(i,end=" ")

9 18 27 36 45 54 63 72 81 90 99 
>>> for i in x:
	print(i,end=" ")  			#再次迭代时,可以看到返回值为空

>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值