valores una tuplas tupla recorrer por obtener llenar listas lista entre diferencia conjuntos comprensión como anidadas python list tuples

tuplas - llenar una lista en python



¿Cómo sumo el primer valor de cada tupla en una lista de tuplas en Python? (7)

Tengo una lista de tuplas (siempre pares) como esta:

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

Me gustaría encontrar la suma de los primeros artículos en cada par, es decir:

0 + 2 + 5 + 2

¿Cómo puedo hacer esto en Python? Por el momento estoy iterando a través de la lista:

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

Tengo la sensación de que debe haber una forma más pitónica.


A continuación se muestra el código de ejemplo, también puede especificar el rango de la lista.

def test_lst_sum(): lst = [1, 3, 5] print sum(lst) # 9 print sum(lst[1:]) # 8 print sum(lst[5:]) # 0 out of range so return 0 print sum(lst[5:-1]) # 0 print sum(lst[1: -1]) # 3 lst_tp = [(''33'', 1), (''88'', 2), (''22'', 3), (''44'', 4)] print sum(x[1] for x in lst_tp[1:]) # 9


Obscura (pero divertida) respuesta:

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

O cuando zip son iterables solo esto debería funcionar:

>>> sum(zip(*list_of_pairs).__next__()) 9


Si no le importa convertirlo en una matriz numpy, puede usar np.sum sobre axis=0 como se indica here


Si tiene una lista muy grande o un generador que produce una gran cantidad de pares, es posible que desee utilizar un enfoque basado en el generador. Para divertirme también uso itemgetter() e imap() . Sin embargo, un enfoque basado en un generador simple podría ser suficiente.

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)

Edición: itertools.imap () está disponible en Python 2.3. Así que también puedes usar un enfoque basado en un generador.


Una versión compatible con Python 2.3 es

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

o en versiones recientes de Python, vea esta respuesta o esta .


Yo recomiendo:

sum(i for i, _ in list_of_pairs)

Nota :

Usar la variable _ (o __ para evitar conflictos con el alias de gettext ) en lugar de j tiene al menos dos beneficios:

  1. _ (que significa marcador de posición) tiene una mejor legibilidad
  2. pylint no se quejará: "Variable no utilizada ''j''"

sum(i for i, j in list_of_pairs)

va a hacer también