【问题标题】:how to loop over multiple lists in python如何在python中循环多个列表
【发布时间】:2016-10-11 19:34:54
【问题描述】:

下面,set1、set2、set3 是 len(setn) =len(index) 的列表。我想循环遍历这些列表(setn)中的每一个,如下所示,

index = range(10)
set1 = range(10,20)
set2 = range(30,40)
set3 = range(40,50)
listset = [set1, set2, set3]
for i in listset:
  for k, j in zip(index, i):
     print k, j

Result:
0 s
1 e
2 t
3 1
0 s
1 e
2 t
3 2
0 s
1 e
2 t
3 3

如何获得打印“index, set1”的每个元素(如下所示)的结果,然后是“index, set2”,然后是“index, set3”。

0 10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
and so on...

【问题讨论】:

  • 你的 for 循环可以得到预期的结果,你在搜索什么?
  • 抱歉,我认为我对问题的编辑解决了您的问题......所以这只是引号的错字。
  • 正确编辑的帖子(将文字 'set1'etc 替换为真实变量名称 set1(注意不再有撇号,产生所需的输出 ;-)
  • 有一瞬间我以为我已经破坏了这个问题:)
  • @Jean-FrançoisFabre 没有非常紧凑的内联答案 ;-)

标签: python list loops


【解决方案1】:

您想合并enumerateitertools.chain

from itertools import chain
s1 = range(10)
s2 = range(10, 20)
s2 = range(20, 30)
c = chain(enumerate(s1), enumerate(s2), enumerate(s3))
for i, n in c:
    print(str(i).ljust(4), n)

【讨论】:

  • 能否请您简要解释一下这条链的工作原理。例如,我尝试了“for i in c: print i”,它以不同的格式输出相同的结果。那么 print i, n 和简单地 print i 有什么区别。如何从 c 中仅打印第一个(或任何特定的)集合(s1,s2)?
  • @gogo 我们给chain 任意数量的迭代器。 chain 返回一个生成器,该生成器从这些迭代器中产生值以便耗尽。因此,我们首先从s1 获取所有内容,然后从s2 获取所有内容,依此类推。如果你只想要c 中的s1s2,那么你必须检查每个值以查看它是否是s3 的第一个值,或者从c 的定义中排除s3
  • @gogo 如果您查看list(enumerate([10, 11, 12])) 的输出,您会看到它产生了[(0, 10), (1, 11), (2, 12)]。 enumerate 所做的是将序列中的每个元素替换为 (index, element) 的元组,其中 index 是该元素在列表中的索引,因此当您编写 for i in c: 时,i 等于这些元组。当您编写for i, n in c: 时,它会自动解包元组,以便i 是索引,n 是元素。
【解决方案2】:

您可以将 set1、2 和 3 连接在一起,然后使用 itertools.cycle(index) 并将生成的两个东西压缩在一起: zip(itertools.cycle(index), set1 + set2 + set3)

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2018-10-06
    • 2010-10-05
    • 1970-01-01
    • 2021-02-25
    • 2015-05-23
    相关资源
    最近更新 更多