Gibt es eine bessere Möglichkeit, zip mit einer beliebigen Anzahl von Itern zu verwenden?
Posted: 16 Jan 2025, 07:13
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:
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:
Und außerdem:
Aber beide behalten einfach die gleiche Reihenfolge bei, die ich durch das Zusammenfügen der Sequenzen erhalten konnte.
Ich konnte es zum Laufen bringen:
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 .
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)
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])
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)
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]
Gibt es einen Weg mit Listenverständnis oder einer Funktion von zip, die ich vermisst habe?
Keine Importe bevorzugt .