by Guest » 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:
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 .
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]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)
[/code]
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]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]
Und außerdem:
[code]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)
[/code]
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]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]
[/code]
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 .