Есть ли лучший способ использовать zip с произвольным количеством итеров?Python

Программы на Python
Ответить
Anonymous
 Есть ли лучший способ использовать zip с произвольным количеством итеров?

Сообщение Anonymous »

С набором данных из произвольного набора списков (или диктов или другого итератора) я хочу создать новый список или кортеж, в котором будут все первые записи, затем все вторые и т. д., как hstack .
Если у меня есть известный набор данных, я могу объединить их вместе следующим образом:

Код: Выделить всё

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)
Но что, если я не знаю, сколько записей (или ключей) в словаре?
Для обработки произвольного набора итераторов Я пробовал:

Код: Выделить всё

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])
А также:

Код: Выделить всё

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)
Но оба они сохраняют тот же порядок, который я мог бы получить при сложении последовательностей.
Мне удалось заставить его работать:

Код: Выделить всё

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]
Это нормально, но это немного громоздко. Похоже, должен быть лучший способ.
Есть ли способ понимания списка или какая-то функция zip, которую я пропустил?
Импорт не предпочтителен. .

Подробнее здесь: https://stackoverflow.com/questions/793 ... r-of-iters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»