2014-09-26 69 views
0

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

下面是一个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欢迎回答。

回答

5

不使用for可言,你需要一个拉姆达:

>>> 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 

或者没有拉姆达:

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

或者使用numpy的:

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

之所以选中,是因为它可以在没有额外包的情况下使用。谢谢! – Gabriel 2014-09-26 19:20:04

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 
相关问题