2017-04-17 1 views
0

Ich habe 3 Listen, die ich auf eine bestimmte Weise kombiniere (mit izip). dann führe ich eine Berechnung auf der kombinierten Tupelliste durch. Sobald die Berechnung durchgeführt ist, muss ich diese Operation rückgängig machen, um die ursprüngliche Liste zurück zu bekommen (allerdings mit einigen geänderten Werten). Gibt es eine einfache pythonische Art, dies zu tun?Entpacken Sie Einträge aus der Liste der Tupel in Python 2.7

grouped = [] 

med_done = 0 
lrg_done = 0   

#While items exist in small, pair up one item from each list 
grouped.extend(list(izip(sml,med,lrg))) 

done = len(sml) 

# While items remain in med, pair up one from med an two from lrg 
grouped.extend(list(izip(med[done:],lrg[done::2],lrg[(done+1)::2]))) 

done = done + (2*(len(med)-len(sml))) 

# Finish pairing up remaining items from lrg 
grouped.extend(list(izip_longest(lrg[done::3],lrg[(done+1)::3],lrg[(done+2)::3],fillvalue = '-')))  

Dies erzeugt:

smlBinary:[6 6 7 7 7 8 6 8 7] 

medBinary:[4 3 4 3 3 3 5 5 4 5 3 5 3 3 4 4] 

lrgBinary:[0 1 2 0 0 2 1 1 1 1 1 2 2 2 0 2 2 1 2 1 2 1 0 1 2 1 0 2 1 2 0 1 0 1 0 1] 

Grouped[(6, 4, 0), (6, 3, 1), (7, 4, 2), (7, 3, 0), (7, 3, 0), (8, 3, 2), (6, 5, 1), (8, 5, 1), (7, 4, 1), (5, 0, 1), (3, 2, 0), (5, 0, 2), (3, 1, 1), (3, 1, 1), (4, 1, 2), (4, 2, 2), (1, 2, 1), (0, 2, 1), (2, 0, 1), (0, 1, 0), (1, '-', '-')] 

FRAGE: Jetzt gibt es eine ähnliche Technik, die ich zurück zu ‚entkoppeln‘ diese Elemente verwenden konnten die ursprünglichen Listen zu bekommen?

Antwort

0

Also wenn ich richtig verstehe, müssen Sie nur die Tupel in Listen aufteilen? Sie wissen nicht viel über izip, aber es sieht aus wie Sie es gerade mit ein paar Listenkomprehensionen tun könnte:

sm_out = [tup[0] for tup in grouped] 
med_out = [tup[1] for tup in grouped] 
lg_out = [tup[2] for tup in grouped] 
+0

Hallo @Anddrrw, Wenn es gleichmäßig gepaart wäre, würde Ihre Methode perfekt funktionieren, aber die Art, wie die Paarung funktioniert, bedeutet, dass ich keine einzige Methode für die gesamte "gruppierte" Liste verwenden kann. zumindest muss es in 3 Stücken gemacht werden. –

1

Sie eine Kombination aus variablen Argumente und die Zip-Funktion zum Entpacken verwenden können.

unzipped = zip(*zipped) 

Wo zipped Ihre grouped variabel ist.

+0

Hi @EyuelDK, ja, ich hatte gehofft, so etwas zu verwenden, aber ich würde es in 3 'Stücken' genauso machen wie den izip Teil, aber ohne Schleifen. –

+0

Ich verstehe Ihren Kommentar nicht, aber 'entpackt', in Ihrem Fall, sollte ein Array der Länge 3 werden, wo jedes Array das Original ist, d. H. Sml, med, lrg. – EyuelDK

Verwandte Themen