функция суммы питона forloop - PullRequest
2 голосов
/ 19 декабря 2011

Мне просто интересно .. Как я могу суммировать различные элементы в цикле for?

for element in [(2,7),(9,11)] :
        g=sum(element[1]-element[0]+1)
        print g

Если я удалю 'sum', я получу:

6
3

Ответы [ 6 ]

11 голосов
/ 19 декабря 2011

Я не уверен, что ты хочешь получить.Это так?

>>> print sum(element[1]-element[0]+1 for element in [(2,7), (9,11)])
9

Это выражение генератора эквивалентно

temp = []
for element in [(2,7), (9,11)]:
    temp.append(element[1]-element[0]+1)
print sum(temp)

, но позволяет избежать построения списка в памяти и, следовательно, более эффективно.

3 голосов
/ 19 декабря 2011

Вы можете заменить это на генераторное выражение :

In [20]: sum(element[1] - element[0] + 1 for element in [(2, 7), (9, 11)])
Out[20]: 9

Это можно упростить до:

In [21]: sum(y - x + 1 for x,y in [(2, 7), (9, 11)])
Out[21]: 9

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

2 голосов
/ 19 декабря 2011
>>> sum(right-left+1 for left,right in [(2,7),(9,11)])
9
1 голос
/ 19 декабря 2011

Самый простой способ:

sum(map(lambda (x,y): y-x+1 , [(2,7),(9,11)]))
1 голос
/ 19 декабря 2011

Вы можете использовать лямбда-функцию, чтобы отобразить ваш список в список сумм, что-то вроде этого:

list_of_tuples = [(2,4),(5,7)]
list_of_sums = map(lambda x: x[0]+x[1], list_of_tuples)

Есть много других способов сделать то же самое, но если вы никогда не использовали функции map или lambda, это хорошая возможность изучить их;)

0 голосов
/ 19 декабря 2011

Это то, что вы имеете в виду?

g = 0
for element in [(2,7),(9,11)] :
         g= g + (element[1]-element[0]+1)
         print g 

sum принимает только iterable объект

Обновление

g = 0
for element in [(2,7),(9,11)] :
         g += (element[1]-element[0]+1)
print g # moved indention to show the sum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...