python列表推导式

循环可以用来生成列表:

values = [10, 21, 4, 7, 12]
squares = []
for x in values:
    squares.append(x**2)
print squares
[100, 441, 16, 49, 144]

列表推导式可以使用更简单的方法来创建这个列表:

values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values]
print squares
[100, 441, 16, 49, 144]

还可以在列表推导式中加入条件进行筛选。

例如在上面的例子中,假如只想保留列表中不大于10的数的平方:

values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values if x <= 10]
print squares
[100, 16, 49]

也可以使用推导式生成集合和字典:

square_set = {x**2 for x in values if x <= 10}
print(square_set)
square_dict = {x: x**2 for x in values if x <= 10}
print(square_dict)
set([16, 49, 100])
{10: 100, 4: 16, 7: 49}

再如,计算上面例子中生成的列表中所有元素的和:

total = sum([x**2 for x in values if x <= 10])
print(total)
165
想一起学习的,可以加入我的QQ群`923414804`。

但是,Python会生成这个列表,然后在将它放到垃圾回收机制中(因为没有变量指向它),这毫无疑问是种浪费。

为了解决这种问题,与xrange()类似,Python使用产生式表达式来解决这个问题:

total = sum(x**2 for x in values if x <= 10)
print(total)
165

与上面相比,只是去掉了括号,但这里并不会一次性的生成这个列表。

比较一下两者的用时:

x = range(1000000)
%timeit total = sum([i**2 for i in x])
1 loops, best of 3: 3.86 s per loop
%timeit total = sum(i**2 for i in x)
1 loops, best of 3: 2.58 s per loop
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 列表推导式:和列表一样,也采用方括号 [] 表示,并且用到了一个简写版的 for 循环,将推导式开始的那个表达式映...
    BI罗阅读 5,653评论 0 0
  • 愿你一直充满无限的潜力 列表推导式 从上面的代码可以看出,列表推导式是生成一个列表。 生成器 从上面的代码可以看出...
    olaH阅读 5,096评论 1 1
  • 列表推导式可以帮助我们筒化传统的循环代码,看下面的例子: time_zones=[rec['tz'] for re...
    adorevip阅读 3,437评论 0 0
  • List Comprehension: Elegant way to create new List 从现有列表中...
    庵下桃花仙阅读 1,066评论 0 0
  • 李丹丹焦点网络初期13期,坚持分享第45天。 今天下午第一次上瑜伽课,听的这些懵。因为以前没有练过瑜伽,老...
    随其自然1阅读 803评论 0 0