Python列表生成式与生成器

 

目录

1.列表生成式

1.1 基本语法

1.2 for+if

1.3 for+if+else

1.4 嵌套for

2.生成器

3.结论


bob = {'pay': 30000 , 'job':'dev','age' : 42 ,'name':'Bob Smith'}
sue = {'pay': 40000 , 'job':'hdww','age' : 45 ,'name':'Sue Jones'}
people = [bob,sue]

1.列表生成式

1.1 基本语法

[表达式 for 循环计数器 in 可迭代对象]

pay = [person['pay'] for person in people]
print(pay)
[30000, 40000]

1.2 for+if

for表达式还可以在可迭代对象后面加if条件,这样就可以筛选出符合特定条件的元素放入新列表中。
例:

pay = [person['pay'] for person in people if person['age']>42 ]

print(pay)

[40000] 

1.3 for+if+else

for表达式还可以在可迭代对象后面加if条件和else条件,这样就可以筛选出符合特定条件的元素放入新列表中。

pay = [person['pay'] if person['age']>42 else 15 for person in people ]

print(pay)

[15, 40000] 

1.4 嵌套for

pay = [field for person in people for field in person ]
print(pay)
['pay', 'job', 'age', 'name', 'pay', 'job', 'age', 'name']

在大多数情况下,列表生成式优先于for和if循环,因为:

它们比for循环快得多它们被认为比循环和映射函数更具python特性列表生成式的语法更容易阅读

2.生成器

上面我们把结果和推导式放在了一个方括号里,所以生成的是列表,如果放在圆括号里捏?会不会是元组呢?我们来试一下:

pay = (person['pay'] for person in people)
print(type(pay))

<class 'generator'>

原来是一个生成器。如果想要生成列表或者元组的话,只需要用内置函数 list()tuple() 转换一下就好了。

3.结论

列表生成式是一种高效的操作。对于简单的任务,生成式的语法很容易,在复杂的情况下可能会变得棘手。

需要注意的是,列表生成式并不总是最佳选择。它们将整个输出列表加载到内存中。这对于中小型列表是可以接受的,甚至是可取的,因为它使操作更快

然而,当我们处理大型列表(例如10亿个元素)时,应该避免列表生成式。它可能会导致你的计算机崩溃,由于内存需求量过大

对于这样大的列表,一个更好的选择是使用一个生成器它实际上不会在内存中创建一个大的数据结构。生成器在使用项时创建它们。用完后,生成器会将它们扔掉。生成器不会导致内存问题,但它们比列表生成式相对较慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值