Python 中的列表推导式与循环
我经常使用多维数组,这让代码变得很难看,因为需要写很多缩进的代码。我知道有些代码可以用列表推导式和内联语句来替代。例如:
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)