2013-03-17 2 views
4

Есть ли более простой способ суммировать элементы из списка, чем код, который я написал ниже? Я новичок в этом, и это кажется несколько громоздким.Простой способ добавления нескольких элементов списка?

n = [3,5,7] 
o = [4,10,8] 
p = [4,10,5] 

lists = [n, o, p] 

def sumList(x): 
    return sum(x) 


def listAdder(y): 
    count = 0 
    for item in y: 
     count += sumList(item) 
    return count 

print listAdder(lists) 

ответ

10

Что-то вроде:

from itertools import chain 

n = [3,5,7] 
o = [4,10,8] 
p = [4,10,5] 

print sum(chain(n, o, p)) 
# 56 

Это позволяет избежать создания маркированного необходимости список элементов, так как вы передаете их chain непосредственно ...

6

Вы можете сделать это в одной строке , listAdder() такая же, как вызов sum():

sum(sum(x) for x in lists) 
+1

или 'сумма (карта (сумма, списки)) ' – jamylak

+1

Также у этого решения должно быть больше голосов, это очень просто. – jamylak

1

Как Короче говоря, как он получает, не очень эффективно, хотя

sum(sum(lists, [])) 
2

Вы также можете избежать список списков и просто просуммировать непосредственно:

sum(n+o+p)

+0

Конечно, это создает несколько списков. Путем копирования всех элементов из всех списков, некоторые из них несколько раз тоже. – delnan