首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代列表的迭代器

迭代列表的迭代器
EN

Stack Overflow用户
提问于 2019-02-11 14:47:00
回答 2查看 405关注 0票数 1

我想在Python3中迭代一组Iterable列表。

不同的是,我有一个迭代矩阵,我想循环并在每次迭代中得到一个值矩阵。更具体地说,我有几个文件(行),它们有多个版本(列),我希望在每次迭代时,获得一个包含所有文件的第一行的元组/矩阵,等等。

所以,考虑到这样的情况

代码语言:javascript
复制
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))]
]

我想

代码语言:javascript
复制
for sources_with_their_factors in MAGIC_HERE(a):
  print(sources_with_their_factors)

并获取

代码语言:javascript
复制
((1,11,21), (101,111,121))
((2,12,22), (102,112,122))
…

我试过了

代码语言:javascript
复制
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>),)

但这不是在重复我的范围。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-11 14:52:29

显然,您可以将每个子列表中的迭代器放在一起,只是缺少了如何将结果迭代器放在一起的方法。我会解压生成器表达式:

代码语言:javascript
复制
for t in zip(*(zip(*l) for l in a)):
    print(t)

((1, 11, 21), (101, 111, 121))
((2, 12, 22), (102, 112, 122))
...
票数 2
EN

Stack Overflow用户

发布于 2019-02-11 14:52:37

为什么不直接使用索引呢?

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54633091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档