我有一个像这样的二维列表(总是正方形):
[[a1,a2,a3], [b1,b2,b3], [c1,c2,c3]]
我需要列出27个包含以下元素的列表:
[a1+b1+c1],[a1+b1+c2],[a1+b1+c3],......,[a3+b3+c2],[a3+b3+c3]
如果主列表始终包含3个元素,我可以使用这种算法:
for i in list[0]
for j in list[1]:
for k in list[2]:
some_func(i,j,k)
但是我的问题是主列表的长度每次都不同。 有没有把戏? 谢谢!
答案 0 :(得分:2)
您可以使用function my_is_int($value){ return $value === (string)(int)$value; }
my_is_int('2'); // true
my_is_int('2.1') // false
中的product
itertools
这通过获取每个子列表的笛卡尔乘积并对每个子列表求和来进行。
当然,可以缩短为:
>>> from itertools import product
>>> a =[[1,2,3],[4,5],[6,7,8,9]]
>>> print ([i for i in product(*a)])
[(1, 4, 6), (1, 4, 7), (1, 4, 8), (1, 4, 9), (1, 5, 6), (1, 5, 7), (1, 5, 8), (1
, 5, 9), (2, 4, 6), (2, 4, 7), (2, 4, 8), (2, 4, 9), (2, 5, 6), (2, 5, 7), (2, 5
, 8), (2, 5, 9), (3, 4, 6), (3, 4, 7), (3, 4, 8), (3, 4, 9), (3, 5, 6), (3, 5, 7
), (3, 5, 8), (3, 5, 9)]
>>> print ([sum(i) for i in product(*a)])
[11, 12, 13, 14, 12, 13, 14, 15, 12, 13, 14, 15, 13, 14, 15, 16, 13, 14, 15, 16,
14, 15, 16, 17]
使用>>> print (list(map(sum, product(*a))))
[11, 12, 13, 14, 12, 13, 14, 15, 12, 13, 14, 15, 13, 14, 15, 16, 13, 14, 15, 16,
14, 15, 16, 17]
忽略for循环。
答案 1 :(得分:0)
您可以使用itertools.product
>>> import itertools
>>> s=[[1,2,3],[4,5,6],[7,8,9]]
>>> list(map(sum, itertools.product(*s)))
[12, 13, 14, 13, 14, 15, 14, 15, 16, 13, 14, 15, 14, 15, 16, 15, 16, 17, 14, 15, 16, 15, 16, 17, 16, 17, 18]