it-swarm.com.de

Wiederholen Sie eine Liste von Tupeln

Ich bin auf der Suche nach einer sauberen Methode, um eine Liste von Tupeln zu durchlaufen, in denen jedes ein Paar wie [(a, b), (c,d) ...] ist. Darüber hinaus möchte ich die Tupel in der Liste ändern.

Es ist üblich, zu vermeiden, dass eine Liste geändert wird, während sie durchlaufen wird. Was soll ich tun? Hier ist was ich will:

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

Ersetzen Sie einfach die Tupel in der Liste. Sie können eine Liste ändern, während Sie darüber gehen, solange Sie keine Elemente hinzufügen oder entfernen:

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

oder wenn Sie die Änderungen an b wie oben in einer Funktion zusammenfassen können, verwenden Sie ein Listenverständnis:

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

Warum gehen Sie nicht für ein Listenverständnis, anstatt es zu ändern?

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

hier sind ein paar Ideen:

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