我正在处理以下代码:

mylist = [1,2,3,4,5,6,7,8,9,10.....]
for x in range(0, len(mylist), 3):
    value = mylist[x:x + 3]
    print(value)


基本上,我一次要在mylist中获取3个项目,代码比那还要大,但是我正在做很多事情,它们从中返回一个值,然后从mylist中获取接下来的3个项目>并继续进行操作,直到此列表的末尾。

但是现在我有一个问题,我需要确定每个迭代,但是它们遵循一个规则:

第一个循环来自A,第二个循环来自B,第三个循环来自C。
当它到达第三个时,它从A重新开始,所以我想做的是这样的:

mylist[0:3]来自A

mylist[3:6]来自B

mylist[6:9]来自C

mylist[9:12]来自A

mylist[12:15]来自B ......

最初的想法是实现一个从A到C的标识符,并且每次迭代都会跳转到下一个标识符,但是当到达C时,它将返回到A。

所以输出看起来像这样:

[1,2,3] from A
[4,5,6] from B
[6,7,8] from C
[9,10,11] from A
[12,13,14] from B
[15,16,17] from C
[18,19,20] from A.....


我不好的解决方案:
创建identifiers = [A,B,C]乘以mylist-> identifiers = [A,B,C]*len(mylist)的len
因此,A,B和C的数量与需要标识的mylist编号相同。然后在我的for循环中添加一个计数器,该计数器为其自身添加+1,并访问列表的索引。

mylist = [1,2,3,4,5,6,7,8,9,10.....]
identifier = ['A','B','C']*len(mylist)
counter = -1
for x in range(0, len(mylist), 3):

    value = mylist[x:x + 3]
    counter += 1
    print(value, identifier[counter])


但是它太丑陋而且根本不快。有谁知道更快的方法吗?

最佳答案

循环,压缩和解压缩:

mylist = [1,2,3,4,5,6,7,8,9,10]

for value, iden in zip(mylist, itertools.cycle('A', 'B', 'C')):
    print(value, iden)


输出:

1 A
2 B
3 C
4 A
5 B
6 C
7 A
8 B
9 C
10 A

关于python - 在每个for循环迭代上遍历列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49134404/

10-12 00:24
查看更多