2012-02-07 5 views
2

У меня есть списокКак добавить номера в вложен Python списки

[["Sunday", 7, 0], ["Sunday", 2, 0], ["Monday", 1, 5], ["Tuesday", 5, 0], ["Thursday", 2, 0], ["Friday", 3, 0], ["Friday", 1, 0], ["Saturday", 4, 0], ["Monday", 8, 0], ["Monday", 1, 0], ["Tuesday", 1, 0], ["Tuesday", 2, 0], ["Wednesday", 0, 5]] 

Могу ли я добавить значения в списках, чтобы получить суммы, как

["I dont need this value", 37, 10] 
+0

Я предполагаю, что '100' и' 60' - это лишь некоторые произвольные примеры, а не фактические результаты, которые вы ожидаете от списка в своем вопросе? – NPE

+0

Да, это произвольные номера –

ответ

8

Это именно то, что reduce() делается для:

In [4]: reduce(lambda x,y:['',x[1]+y[1],x[2]+y[2]], l) 
Out[4]: ['', 37, 10] 

где l - это ваш список.

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

+0

Пожалуйста, если вы не возражаете, я хочу задать вам еще один вопрос: либо в чате, либо что-нибудь. –

+2

Почему бы не задать свой вопрос здесь, чтобы все могли участвовать? –

4

поручаю свой список l:

l = [ your list .... ] 
['dont needed', sum([ x[1] for x in l ]), sum( [x[2] for x in l ]) ] 

Результат:

['dont needed', 37, 10] 
3
>>> stuff=[["Sunday", 7, 0], ["Sunday", 2, 0], ["Monday", 1, 5], ["Tuesday", 5, 0], ["Thursday", 2, 0], ["Friday", 3, 0], ["Friday", 1, 0], ["Saturday", 4, 0], ["Monday", 8, 0], ["Monday", 1, 0], ["Tuesday", 1, 0], ["Tuesday", 2, 0], ["Wednesday", 0, 5]] 
>>> sum(j for i,j,k in stuff),sum(k for i,j,k in stuff) 
(37, 10) 
4

конечно, конечная:

>>> stuff=[["Sunday", 7, 0], ["Sunday", 2, 0], ["Monday", 1, 5], ["Tuesday", 5, 0], ["Thursday", 2, 0], ["Friday", 3, 0], ["Friday", 1, 0], ["Saturday", 4, 0], ["Monday", 8, 0], ["Monday", 1, 0], ["Tuesday", 1, 0], ["Tuesday", 2, 0], ["Wednesday", 0, 5]] 
>>> stuff=zip(*stuff) 
>>> map(sum,stuff[1:]) 
[37, 10] 
5

Для гибкого количества значений в вещь и даже меньше персонажа с, вы можете использовать

In [1]: [sum(values) for values in zip(*l)[1:]] 
Out[1]: [37, 10] 

zip дает кортежи комбинации соответствующих элементов (т.е. кортеж со всеми 1-ым элементами, кортеж со всеми 2-мя элементами и т. д.), которые можно суммировать каждый (кроме первого строкового значения). Конечно, вы все равно можете добавить "" или что захотите в начале при необходимости.

+0

yup, приятное использование zip mate –

Смежные вопросы