2016-04-26 15 views
0

Ich mache ein paar Sachen mit Daten aus Dateien, und ich habe bereits jede Spalte mit ihren Informationen gezippt, aber jetzt möchte ich Informationen aus anderen Dateien kombinieren (wo ich die Informationen auch gezippt habe) und ich Ich weiß nicht, wie man es entpackt und zusammenbringt.Zip-Listen von Tupeln

EDIT: ich ein paar Zip-Objekte haben:

l1 = [('a', 'b'), ('c', 'd')] # list(zippedl1) 
l2 = [('e', 'f'), ('g', 'h')] # list(zippedl1) 
l3 = [('i', 'j'), ('k', 'm')] # list(zippedl1) 

und ich möchte, wie entpacken:

unzipped = [('a', 'c', 'e', 'g', 'i', 'k'), ('b', 'd', 'f', 'h', 'j', 'm')] 

würde ich nicht die komprimierten Strukturen in eine Liste umwandeln möchte, nur aus Gedächtnisgründen. Ich habe gesucht und ich habe nichts gefunden, was mir hilft. Hoffe du kannst mir bitte helfen! [traurig über mein schlechtes Englisch]

+0

'zip' Objekte verwenden _less_ memory als eine' liste', da diese faul ausgewertet werden. Dies setzt voraus, dass Ihre "Zip-Objekte" wirklich "Zip" -Objekte sind, weil sie für mich wie "Listen" -Literale aussehen. – TigerhawkT3

Antwort

0

Ich glaube, Sie eine entpackte chain zip wollen:

# Leaving these as zip objects as per your edit 
l1 = zip(('a', 'c'), ('b', 'd')) 
l2 = zip(('e', 'g'), ('f', 'h')) 
l3 = zip(('i', 'k'), ('j', 'm')) 

unzipped = [('a', 'c', 'e', 'g', 'i', 'k'), ('b', 'd', 'f', 'h', 'j', 'm')] 

Sie einfach tun können,

from itertools import chain 
result = list(zip(*chain(l1, l2, l3))) 

# You can also skip list creation if all you need to do is iterate over result: 
# for x in zip(chain(l1, l2, l3)): 
#  print(x) 

print(result) 
print(result == unzipped) 

Diese Drucke:

[('a', 'c', 'e', 'g', 'i', 'k'), ('b', 'd', 'f', 'h', 'j', 'm')] 
True 
+0

Es funktioniert! Vielen Dank, viel Liebe <3 – Zealot

0

Sie müssen zuerst die Listen verketten:

>>> l1 = [('a', 'b'), ('c', 'd')] 
>>> l2 = [('e', 'f'), ('g', 'h')] 
>>> l3 = [('i', 'j'), ('k', 'm')] 
>>> zip(*(l1 + l2 + l3)) 
[('a', 'c', 'e', 'g', 'i', 'k'), ('b', 'd', 'f', 'h', 'j', 'm')] 
+0

Ich vermisse etwas auf die Erklärung, sorry :(. Ich habe l1, l2 und l3 als zip-Objekte und ich möchte nicht in die Liste transnform! – Zealot