web-dev-qa-db-fra.com

Itérer une liste de tuples

Je cherche un moyen propre de parcourir une liste de n-uplets où chacun est une paire telle que so [(a, b), (c,d) ...]. En plus de cela, je voudrais modifier les nuplets de la liste.

La pratique standard consiste à éviter de modifier une liste tout en parcourant celle-ci. 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)
12
Clev3r

Il suffit de remplacer les tuples dans la liste; vous pouvez modifier une liste en boucle, tant que vous évitez 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 modifications apportées à b dans une fonction comme précédemment, utilisez une liste à la compréhension:

Tuple_list = [(a, some_process(b)) for (a, b) in Tuple_list]
29
Martijn Pieters

Pourquoi ne faites-vous pas une liste de compréhension au lieu de la modifier?

new_list = [(a,new_b) for a,b in Tuple_list]
4
Udo Klein

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 ]
0
Jonathan Vanasco