iterables的名单列表的迭代器

问题描述 投票:1回答:2

我想重复Iterables在Python3的名单列表。

换句话说,我有iterables的矩阵,我想通过循环,并在每次迭代获取值的矩阵。更具体地讲,我有几个文件(行),这让他们的多个版本(列),我想在每一次迭代中,得到一个包含我的所有文件等第一线的元组/矩阵。

因此,鉴于这样的事情

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>),)

但它不是我的迭代范围。

python python-3.x iterator iterable
2个回答
2
投票

很明显,你可以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))
...

0
投票

为什么不使用索引?

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))

编辑:这是一个简单的方法 - 我(一个傻瓜)会做到这一点。拉链将更加优雅和有效的。

© www.soinside.com 2019 - 2024. All rights reserved.