2014-09-26 2 views
0

У меня есть список из произвольного количества подписок (это означает, что он не фиксирован и может меняться при другом прогоне кода) Мне нужно умножить длины всех подписок и получить окончательное число.Множественные длины всех подписок в списке

Вот ММВЙ:

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

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 
Смежные вопросы