列表中所有子列表的长度乘以

时间:2014-09-26 18:03:37

标签: python numpy

我有一个由任意数量的子列表组成的列表(意味着它不是固定的,可以在不同的代码运行中更改)我需要将所有子列表的长度相乘并获得最终的数字。

这是一个MWE:

a = [[1.2,5.8,6,3], [1,48,5], [2.,3], [4,7,5.,2,5,3,6,554,6.,6,9], [6,.3,8,45.2,.001]]
n = 1
for sub_lst in a:
    n *= len(sub_lst)
print n

导致1320,因为这些列表包含4个,3个,2个,11个和5个元素。

是否可以在不诉诸for循环的情况下执行此操作?欢迎numpy个答案。

2 个答案:

答案 0 :(得分:5)

根本不使用for,你需要一个lambda:

>>> a = [[1.2,5.8,6,3], [1,48,5], [2.,3], [4,7,5.,2,5,3,6,554,6.,6,9], [6,.3,8,45.2,.001]]
>>> reduce(lambda x, y: x*len(y), a, 1)
1320

或没有lambda:

>>> reduce(operator.mul, map(len, a), 1)

或使用numpy:

>>> import numpy as np
>>> np.prod(map(len, a))

答案 1 :(得分:2)

这使用reduceoperator.mul

>>> import operator
>>> a = [[1.2,5.8,6,3], [1,48,5], [2.,3], [4,7,5.,2,5,3,6,554,6.,6,9], [6,.3,8,45.2,.001]]
>>> reduce(operator.mul, (len(l) for l in a), 1)
1320