我有两个名单
Numberset1 = [10,11,12]
Numberset2 = [1,2,3,4,5]我想通过操作列表来显示输出,预期的输出是
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由于第一个列表中的第二个数字应该从第二个列表中的第二个数字开始,所以我尝试枚举它并创建另一个列表。
test=[j for i, o in enumerate(Numberset2) for j in Numberset2[i:] + Numberset2[:i] ]我尝试过的代码如下
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)我得到的输出是
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我知道我正在迭代测试,这就是为什么我要得到这么多的数字,如何确保我只得到预期的输出。
发布于 2018-04-30 16:19:25
只需使用移位索引和模块在双循环中打印:
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)])结果:
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或者使用列表理解生成元组:
[(n,Numberset2[(j+i) % len(Numberset2)]) for i,n in enumerate(Numberset1) for j in range(len(Numberset2))]这意味着:
[(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),并且得到数组超出边界的异常。为了确保索引被移动并保持在范围内,我们添加了一个模运算符,这样它就会被包围。
发布于 2018-04-30 17:03:11
给予:
Numberset1 = [10,11,12]
Numberset2 = [1,2,3,4,5]您可以在Numberset2上使用itertools.cycle制作无限循环迭代器,使用itertools.islice获取迭代器的一部分,然后使用next()跳过每个循环之后的迭代器。
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)https://stackoverflow.com/questions/50104370
复制相似问题