Итератор списка списков итераций - PullRequest
0 голосов
/ 11 февраля 2019

Я хотел бы выполнить итерацию списка списков итераций в Python3.

Иными словами, у меня есть матрица итерируемых элементов, и я хотел бы просмотреть и получить на каждой итерации матрицу значений.Более конкретно, у меня есть несколько файлов (строк), которые имеют несколько версий (столбцов), и я хотел бы на каждой итерации получить кортеж / матрицу, содержащую первую строку всех моих файлов и т. Д.

Итак, учитывая что-то вроде этого

a = [
  [iter(range(1,10)), iter(range(11,20)), iter(range(21,30))],
  [iter(range(101,110)), iter(range(111,120)), iter(range(121,130))]
]

Я бы хотел

for sources_with_their_factors in MAGIC_HERE(a):
  print(sources_with_their_factors)

и получить

((1,11,21), (101,111,121))
((2,12,22), (102,112,122))
…

Я пытался

for b in zip(zip(*zip(*a))):
    ...:     print(b)
    ...:
((<range_iterator object at 0x2b688d65b630>, <range_iterator object at 0x2b688d65b7e0>, <range_iterator object at 0x2b688d65b540>),)
((<range_iterator object at 0x2b688d65ba50>, <range_iterator object at 0x2b688d65b6f0>, <range_iterator object at 0x2b688d65b0c0>),)

Но это не повторяет мои диапазоны.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Почему бы просто не использовать индексы?

for i in range(len(a[0][0])):
    tupA = (a[0][0][i], a[0][1][i], a[0][2][i])
    tupB = (a[1][0][i], a[1][1][i], a[1][2][i])
    print((tupA, tupB))

РЕДАКТИРОВАТЬ: это простой способ - способ, которым я (простой человек) сделал бы это. zip будет намного элегантнее и эффективнее.

0 голосов
/ 11 февраля 2019

Очевидно, что вы можете zip итераторы в каждом подсписке вместе, вы просто не понимаете, как zip получить итераторы вместе.Я бы распаковал выражение генератора:

for t in zip(*(zip(*l) for l in a)):
    print(t)

((1, 11, 21), (101, 111, 121))
((2, 12, 22), (102, 112, 122))
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...