迭代2个列表的循环简单

Pyt*_*bie 2 python python-3.x

我有2个清单

Numberset1 = [10,11,12]
Numberset2 = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

test=[j for i, o in enumerate(Numberset2) for j in Numberset2[i:] + Numberset2[:i] ]
Run Code Online (Sandbox Code Playgroud)

我试过的代码如下

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)
Run Code Online (Sandbox Code Playgroud)

我得到的输出是

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
Run Code Online (Sandbox Code Playgroud)

我知道我是迭代测试,这就是为什么我得到这么多号码,我怎样才能确保我得到只有预期输出

Jea*_*bre 7

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

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)])
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

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

[(n,Numberset2[(j+i) % len(Numberset2)]) for i,n in enumerate(Numberset1) for j in range(len(Numberset2))]
Run Code Online (Sandbox Code Playgroud)

这使:

[(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)]
Run Code Online (Sandbox Code Playgroud)

它是如何工作的:

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

如果我们离开j+i它到达len(Numberset2)并且我们得到数组越界异常.为了确保索引被移位保持在范围内,我们添加了一个模运算符,以便它包含在内.