我有一个由任意数量的子列表组成的列表(意味着它不是固定的,可以在不同的代码运行中更改)我需要将所有子列表的长度相乘并获得最终的数字。
这是一个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
个答案。
答案 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)
这使用reduce
和operator.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