首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于迭代2个列表的简单for循环

用于迭代2个列表的简单for循环
EN

Stack Overflow用户
提问于 2018-04-30 16:13:24
回答 2查看 152关注 0票数 2

我有两个名单

代码语言:javascript
复制
Numberset1 = [10,11,12]
Numberset2 = [1,2,3,4,5]

我想通过操作列表来显示输出,预期的输出是

代码语言:javascript
复制
10 1
10 2
10 3
10 4
10 5
11 2
11 3
11 4
11 5
11 1
12 3
12 4
12 5
12 1
12 2

由于第一个列表中的第二个数字应该从第二个列表中的第二个数字开始,所以我尝试枚举它并创建另一个列表。

代码语言:javascript
复制
test=[j for i, o in enumerate(Numberset2) for j in Numberset2[i:] + Numberset2[:i] ]

我尝试过的代码如下

代码语言:javascript
复制
Numberset1 = [10,11,12]
Numberset2 = [1,2,3,4,5]
test=[j for i, o in enumerate(Numberset2) for j in Numberset2[i:] + Numberset2[:i] ]
for D in Numberset1:
    for j in test:
        print(D,j)

我得到的输出是

代码语言:javascript
复制
10 1
10 2
10 3
10 4
10 5
10 2
10 3
10 4
10 5
10 1
10 3
10 4
10 5
10 1
10 2
10 4
10 5
10 1
10 2
10 3
10 5
10 1
10 2
10 3
10 4
11 1
11 2
11 3
11 4
11 5
11 2
11 3
11 4
11 5
11 1
11 3
11 4
11 5
11 1
11 2
11 4
11 5
11 1
11 2
11 3
11 5
11 1
11 2
11 3
11 4
12 1
12 2
12 3
12 4
12 5
12 2
12 3
12 4
12 5
12 1
12 3
12 4
12 5
12 1
12 2
12 4
12 5
12 1
12 2
12 3
12 5
12 1
12 2
12 3
12 4

我知道我正在迭代测试,这就是为什么我要得到这么多的数字,如何确保我只得到预期的输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-30 16:19:25

只需使用移位索引和模块在双循环中打印:

代码语言:javascript
复制
Numberset1 = [10,11,12]
Numberset2 = [1,2,3,4,5]

for i,n in enumerate(Numberset1):
    for j in range(len(Numberset2)):
        print(n,Numberset2[(j+i) % len(Numberset2)])

结果:

代码语言:javascript
复制
10 1
10 2
10 3
10 4
10 5
11 2
11 3
11 4
11 5
11 1
12 3
12 4
12 5
12 1
12 2

或者使用列表理解生成元组:

代码语言:javascript
复制
[(n,Numberset2[(j+i) % len(Numberset2)]) for i,n in enumerate(Numberset1) for j in range(len(Numberset2))]

这意味着:

代码语言:javascript
复制
[(10, 1), (10, 2), (10, 3), (10, 4), (10, 5), (11, 2), (11, 3),
 (11, 4), (11, 5), (11, 1), (12, 3), (12, 4), (12, 5), (12, 1), (12, 2)]

它是如何工作的

Numberset2[(j+i) % len(Numberset2)]正在访问Numberset的jth索引,添加了外部界的偏移量(0,1,.等等.

如果我们离开j+i,它就会到达len(Numberset2),并且得到数组超出边界的异常。为了确保索引被移动并保持在范围内,我们添加了一个模运算符,这样它就会被包围。

票数 7
EN

Stack Overflow用户

发布于 2018-04-30 17:03:11

给予:

代码语言:javascript
复制
Numberset1 = [10,11,12]
Numberset2 = [1,2,3,4,5]

您可以在Numberset2上使用itertools.cycle制作无限循环迭代器,使用itertools.islice获取迭代器的一部分,然后使用next()跳过每个循环之后的迭代器。

代码语言:javascript
复制
from itertools import cycle, islice

it = cycle(Numberset2)
for i in Numberset1:
    for j in islice(it, len(Numberset2)):
        print(i, j)
    skipped1 = next(it)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50104370

复制
相关文章

相似问题

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