如何在Python中概括这种列表理解?

时间:2012-05-20 13:26:10

标签: python list-comprehension

我有一个整数列表,说l1=[a,b,c]_1to9=range(1,10)。我想得到这个:

 [a*i1+b*i2+c*i3 for i1 in _1to9 for i2 in _1to9 for i3 in _1to9]

但问题是l1不一定是3个元素的列表。那么如何概括呢?

编辑 :帮助想象我想要实现的目标:

 >>> l1=[10001,1010, 100]
 >>> [l1[0]+i1+l1[1]*i2+l1[2]*i3 for i1 in _1to9 for i2 in _1to9 for i3 in _1to9]

1 个答案:

答案 0 :(得分:11)

一些基本的数学可能对此有所帮助。首先,要认识到a*i1+b*i2+c*i3是两个三元素列表的inner (dot) product,可以推广到

def dot_product(a, b):
    return sum(x * y for x, y in zip(a, b))

for i1 in _1to9 for i2 in _1to9 for i3 in _1to9遍历[_1to9] * 3 itertools.product。这是在Python标准库中[dot_product([a, b, c], x) for x in itertools.product(_1to9, repeat=3)] ,所以你有

l

将其推广到任意列表[dot_product(l, x) for x in itertools.product(_1to9, repeat=len(l))] 给出

{{1}}