Как суммировать первое значение в каждом кортеже в списке кортежей в Python?

У меня есть список кортежей (всегда пар):

[(0, 1), (2, 3), (5, 7), (2, 1)] 

Я хотел бы найти сумму первых элементов в каждой паре, то есть:

 0 + 2 + 5 + 2 

Как я могу это сделать в Python? В настоящий момент я повторяю список:

 sum = 0 for pair in list_of_pairs: sum += pair[0] 

У меня такое чувство, что должен быть более питонический путь.

  • Django: отображение пользовательского сообщения об ошибке для проверки подлинности администратора
  • Преобразуйте формулу LaTex в тип, который можно использовать внутри SymPy
  • Как получить основу сплайна, используемую scipy.interpolate.splev
  • Как подать сигнал от запущенного QThread обратно в PyQt Gui, который его начал?
  • Как я могу сделать снимок экрана / изображение веб-сайта с помощью Python?
  • складывание цветовых палитр
  • ValueError: матрицы не выровнены для ошибки копирования и x
  • Как получить отправленные списки изменений за один день с помощью Perforce Python API
  • 5 Solutions collect form web for “Как суммировать первое значение в каждом кортеже в списке кортежей в Python?”

    Версия, совместимая с Python 2.3,

     sum([pair[0] for pair in list_of_pairs]) 

    или в последних версиях Python, см. этот ответ или этот .

     sum(i for i, j in list_of_pairs) 

    будет делать тоже.

    Я рекомендую:

     sum(i for i, _ in list_of_pairs) 

    Примечание .

    Использование переменной _ (или __ чтобы избежать совпадения с псевдонимом gettext ) вместо j имеет как минимум два преимущества:

    1. _ (который обозначает местозаполнитель) имеет лучшую читаемость
    2. pylint не будет жаловаться: «Неиспользованная переменная« j »

    Если у вас очень большой список или генератор, который производит большое количество пар, вы можете использовать подход, основанный на генераторе. Для удовольствия я использую itemgetter() и imap() . Однако простого подхода, основанного на генераторах, может быть достаточно.

     import operator import itertools idx0 = operator.itemgetter(0) list_of_pairs = [(0, 1), (2, 3), (5, 7), (2, 1)] sum(itertools.imap(idx0, list_of_pairs) 

    Изменить: itertools.imap () доступно в Python 2.3. Таким образом, вы можете использовать подход, основанный на генераторе.

    Неясный (но забавный) ответ:

     >>> sum(zip(*list_of_pairs)[0]) 9 

    Или, когда zip's являются итерабельными, это должно работать:

     >>> sum(zip(*list_of_pairs).__next__()) 9 
    Python - лучший язык программирования в мире.