如何一起使用枚举和切片

How to use enumerate and slicing together

以下是枚举的正常用法,我想每10个项目都有一次:

for index, value in enumerate(range(50)):
    if index % 10 == 0:
        print(index,value)

输出:

0 0
10 10
20 20
30 30
40 40

现在假设我想要输出为:

1 1
11 11
21 21
31 31
41 41

2 2
12 12
22 22
32 32
42 42

我该怎么做?

不确定你为什么这样做,但你可以在测试中从 index 中减去 n,例如:

In []:
n = 1
for index, value in enumerate(range(50)):
    if (index-n) % 10 == 0:
        print(index,value)

Out[]:
1 1
11 11
21 21
31 31
41 41

只需为您的第二种情况设置 n=2,如果课程 n=0 是基本情况。

或者,从枚举中的 -n 开始,它会为您提供正确的值(但索引不同):

In []:
n = 1
for index, value in enumerate(range(50), -n):
    if index % 10 == 0:
        print(index,value)

Out[]:
0 1
10 11
20 21
30 31
40 41

但是你真的不需要 enumerate% 索引来获取每 10 个值,假设你想处理任何可迭代的东西只需使用 itertools.islice(),例如

In []:
import itertools as it
n = 0
for value in it.islice(range(50), n, None, 10):
    print(value)

Out[]:
0
10
20
30
40

那么只需更改n的值即可,例如:

In []:
n = 1
for value in it.islice(range(50), n, None, 10):
    print(value)

Out[]:
1
11
21
31
41

我会使用以下函数:

def somefunc(n):
    for i in list(range(50))[n::10]:
        yield i, i

然后用所需的整数调用函数:

for i, j in somefunc(2):
     print(i, j)

例如应该return

2, 2
12, 12
22, 22
...

如果我是对的。