繁体   English   中英

循环Python的列表理解

[英]List comprehension for loops Python

我使用了很多N维数组,并且编写这样的缩进代码会很麻烦,我知道一些代码可以用列表推导和内联语句替换。 例如:

for x in (0,1,2,3):
    for y in (0,1,2,3):
        if x < y:
            print (x, y, x*y)

可以替换为:

print [(x, y, x * y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y]

但是我怎么能改变动作而不是打印来做其他事情:

total = x+y

所以我想做的是:

[(total+=x+y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y]

但是这不起作用

是否有一种聪明的方法来做到这一点,而不是:

for x in (0,1,2,3):
        for y in (0,1,2,3):
            if x < y:
                total+=x+y

sum在这里工作:

total = sum(x+y for x in (0,1,2,3) for y in (0,1,2,3) if x < y)

作为编写N级深度循环的替代方法,您可以使用itertools.product()

In [1]: import itertools as it

In [2]: for x, y in it.product((0,1,2,3),(0,1,2,3)):
   ...:     if x < y:
   ...:         print x, y, x*y

0 1 0
0 2 0
0 3 0
1 2 2
1 3 3
2 3 6

这自然地延伸到N维。

使用numpy 这使您可以使用像向量一样的数组:

x = numpy.arange(3)
y = numpy.arange(3)
total = x + y

使用修改后的问题,也可以添加对sum的调用

total = numpy.sum(x+y)

减少功能直接将集体项目减少为单项。 你可以在这里阅读更多关于它们的内容 ,但这应该适合你:

total=reduce(lambda x,y:x+y,range(4))

要么

total=reduce(lambda x,y:x+y,(0,1,2,3))

另一种可能性是:

for x,y in ((x,y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y):
  print (x, y, x * y)

通过这种方式,你可以迭代你在列表推导中使用的任何东西,而无需实际创建理解列表(如果你理解了我的意思;)如果理解列表很大,可能很大,它会饱和甚至不适合内存,这很方便..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM