Gibt es eine bessere Möglichkeit, zip mit einer beliebigen Anzahl von Itern zu verwenden?Python

Python-Programme
Guest
 Gibt es eine bessere Möglichkeit, zip mit einer beliebigen Anzahl von Itern zu verwenden?

Post by Guest »

Mit einem Datensatz aus einem beliebigen Satz von Listen (oder Diktaten oder anderen Itern) möchte ich eine neue Liste oder ein neues Tupel erstellen, das alle ersten Einträge, dann alle zweiten usw. enthält, wie ein hstack .
Wenn ich einen bekannten Datensatz habe, kann ich ihn wie folgt zusammenpacken:

Code: Select all

data = {'2015': [2, 1, 4, 3, 2, 4],
'2016': [5, 3, 3, 2, 4, 6],
'2017': [3, 2, 4, 4, 5, 3]}

hstack = sum(zip(data['2015'], data['2016'], data['2017']), ())
print(hstack)
# hstack: (2, 5, 3, 1, 3, 2, 4, 3, 4, 3, 2, 4, 2, 4, 5, 4, 6, 3)
Aber was ist, wenn ich nicht weiß, wie viele Einträge (oder Schlüssel) das Diktat hat?
Für die Verarbeitung eines beliebigen Satzes von Iteratoren: Ich habe versucht:

Code: Select all

combined_lists = sum(zip(data[val] for val in data.keys()), ())
# combined_lists: ([2, 1, 4, 3, 2, 4], [5, 3, 3, 2, 4, 6], [3, 2, 4, 4, 5, 3])
Und außerdem:

Code: Select all

nums = sum(zip(num for val in data.keys() for num in data[val]), ())
# nums: (2, 1, 4, 3, 2, 4, 5, 3, 3, 2, 4, 6, 3, 2, 4, 4, 5, 3)
Aber beide behalten einfach die gleiche Reihenfolge bei, die ich durch das Zusammenfügen der Sequenzen erhalten konnte.
Ich konnte es zum Laufen bringen:

Code: Select all

counts = []
entry = list(data.keys())[0]
for idx, count in enumerate(data[entry]):
for val in list(data.keys()):
counts.append(data[val][idx])
# counts: [2, 5, 3, 1, 3, 2, 4, 3, 4, 3, 2, 4, 2, 4, 5, 4, 6, 3]
Das ist in Ordnung, aber etwas sperrig. Scheint, als ob es einen besseren Weg geben sollte.
Gibt es einen Weg mit Listenverständnis oder einer Funktion von zip, die ich vermisst habe?
Keine Importe bevorzugt .

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post