16 votes

Itération d'une liste de tuples

Je cherche un moyen propre d'itérer sur une liste de tuples où chacun est une paire, comme suit [(a, b), (c,d) ...] . En plus de cela, je voudrais modifier les tuples de la liste.

La pratique standard est d'éviter de modifier une liste tout en l'itérant, alors que dois-je faire ? Voici ce que je veux en quelque sorte :

for i in range(len(tuple_list)):
  a, b = tuple_list[i]
  # update b's data
  # update tuple_list[i] to be (a, newB)

34voto

Martijn Pieters Points 271458

Remplacez simplement les tuples de la liste ; vous puede modifier une liste en la parcourant en boucle, à condition d'éviter d'ajouter ou de supprimer des éléments :

for i, (a, b) in enumerate(tuple_list):
    new_b = some_process(b)
    tuple_list[i] = (a, new_b)

ou, si vous pouvez résumer les changements à b dans une fonction comme je l'ai fait ci-dessus, utilisez une compréhension de liste :

tuple_list = [(a, some_process(b)) for (a, b) in tuple_list]

4voto

Udo Klein Points 3038

Pourquoi ne pas opter pour une compréhension de la liste au lieu de la modifier ?

new_list = [(a,new_b) for a,b in tuple_list]

0voto

Jonathan Vanasco Points 4239

Voici quelques idées :

def f1(element):
    return element

def f2(a_tuple):
    return tuple(a_tuple[0],a_tuple[1])

newlist= []
for i in existing_list_of_tuples :
    newlist.append( tuple( f1(i[0]) , f(i1[1]))

newlist = [ f2(i) for i in existing_list_of_tuples ]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X