循环Python的列表理解

dis*_*ive 26 python inline list-comprehension

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

for x in (0,1,2,3):
    for y in (0,1,2,3):
        if x < y:
            print (x, y, x*y)
Run Code Online (Sandbox Code Playgroud)

可以替换为:

print [(x, y, x * y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y]
Run Code Online (Sandbox Code Playgroud)

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

total = x+y
Run Code Online (Sandbox Code Playgroud)

所以我想做的是:

[(total+=x+y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y]
Run Code Online (Sandbox Code Playgroud)

但这不起作用

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

for x in (0,1,2,3):
        for y in (0,1,2,3):
            if x < y:
                total+=x+y
Run Code Online (Sandbox Code Playgroud)

Joc*_*zel 32

sum 在这里工作:

total = sum(x+y for x in (0,1,2,3) for y in (0,1,2,3) if x < y)
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 12

作为编写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
Run Code Online (Sandbox Code Playgroud)

这自然地延伸到N维.


Mic*_*ber 5

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

x = numpy.arange(3)
y = numpy.arange(3)
total = x + y
Run Code Online (Sandbox Code Playgroud)

随着修改后的问题,添加调用sum以及

total = numpy.sum(x+y)
Run Code Online (Sandbox Code Playgroud)