Python 中的列表推导式与循环

27 投票
5 回答
63451 浏览
提问于 2025-04-17 04:45

我经常使用多维数组,这让代码变得很难看,因为需要写很多缩进的代码。我知道有些代码可以用列表推导式和内联语句来替代。例如:

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

5 个回答

5

使用 numpy。这个工具可以让你使用数组,就像使用向量一样进行加法运算:

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

在修改后的问题中,也要加上对 sum 的调用。

total = numpy.sum(x+y)
12

如果你觉得写很多层的循环很麻烦,可以试试用 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个维度,也就是说你可以处理更多层的数据。

32

sum 在这里可以使用:

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

撰写回答