python 从特定索引继续循环
python continuing a loop from a specific index
我写了一些使用枚举循环遍历列表的代码。
for index, item in enumerate(list[start_idx:end_idx])
print('index [%d] item [%s]'%(str(index), item))
列表中的项目只是字符串。有时我不想枚举整个列表,有时我会把列表切开做不同的事情。
我遇到问题的部分是 python 的枚举函数。
文档说你可以这样做:
for index, item in enumerate(list, start_index):
print(str(index))
上面的代码没有达到我的预期。我虽然枚举会从开始位置开始并在结束时停止,但它不会。
我写了一个小程序,它确实很不稳定。
>>> for i, x in enumerate(range(0,20),start=4):
... print(str(i)+'\t'+str(x))
...
4 0
5 1
6 2
7 3
8 4
9 5
10 6
11 7
12 8
13 9
14 10
15 11
16 12
17 13
18 14
19 15
20 16
21 17
22 18
23 19
我希望枚举从索引 4 开始并循环到结尾。所以它会得到 4-19 的范围,但它似乎只是开始索引但仍然从 0-19..
迭代
问题,有没有办法从 python 中的特定索引开始进行迭代循环?
我的预期结果是
>>> for i, x in enumerate(range(0,20),start=4):
... print(str(i)+'\t'+str(x))
...
4 0 # skip
5 1 # until
6 2 # this
7 3 # item
8 4
9 5
10 6
11 7
12 8
13 9
14 10
15 11
16 12
17 13
18 14
19 15
20 16
21 17
22 18
23 19
而不是在起始位置开始索引提供。
你可以这样做:
for index, item in enumerate(list[4:]):
print(str(index))
enumerate
的 start
参数与 iterable 的哪些元素被选中没有任何关系。它只是告诉枚举从什么数字开始。
>>> list(enumerate(range(3)))
[(0, 0), (1, 1), (2, 2)]
>>> list(enumerate(range(3), 1))
[(1, 0), (2, 1), (3, 2)]
如果你想从一个特定的索引开始,你需要提供开始参数和一个slice:
for i, v in enumerate(alist[4:], 4):
...
实际上,如果你得到 range
对象,从中切出一个切片并不是什么大问题,因为 range(n)[:4]
仍然是 range
对象(as @MosesKoledoye提到它是 Python 3 功能 )。但是如果你有一个列表,为了不创建新列表你可以选择itertools.islice
,它将return迭代器。
from itertools import islice
for index, item in enumerate(islice(range(20), 4, None)):
print(index, item)
输出
0 4
1 5
2 6
3 7
4 8
...
我写了一些使用枚举循环遍历列表的代码。
for index, item in enumerate(list[start_idx:end_idx])
print('index [%d] item [%s]'%(str(index), item))
列表中的项目只是字符串。有时我不想枚举整个列表,有时我会把列表切开做不同的事情。
我遇到问题的部分是 python 的枚举函数。
文档说你可以这样做:
for index, item in enumerate(list, start_index):
print(str(index))
上面的代码没有达到我的预期。我虽然枚举会从开始位置开始并在结束时停止,但它不会。
我写了一个小程序,它确实很不稳定。
>>> for i, x in enumerate(range(0,20),start=4):
... print(str(i)+'\t'+str(x))
...
4 0
5 1
6 2
7 3
8 4
9 5
10 6
11 7
12 8
13 9
14 10
15 11
16 12
17 13
18 14
19 15
20 16
21 17
22 18
23 19
我希望枚举从索引 4 开始并循环到结尾。所以它会得到 4-19 的范围,但它似乎只是开始索引但仍然从 0-19..
迭代问题,有没有办法从 python 中的特定索引开始进行迭代循环?
我的预期结果是
>>> for i, x in enumerate(range(0,20),start=4):
... print(str(i)+'\t'+str(x))
...
4 0 # skip
5 1 # until
6 2 # this
7 3 # item
8 4
9 5
10 6
11 7
12 8
13 9
14 10
15 11
16 12
17 13
18 14
19 15
20 16
21 17
22 18
23 19
而不是在起始位置开始索引提供。
你可以这样做:
for index, item in enumerate(list[4:]):
print(str(index))
enumerate
的 start
参数与 iterable 的哪些元素被选中没有任何关系。它只是告诉枚举从什么数字开始。
>>> list(enumerate(range(3)))
[(0, 0), (1, 1), (2, 2)]
>>> list(enumerate(range(3), 1))
[(1, 0), (2, 1), (3, 2)]
如果你想从一个特定的索引开始,你需要提供开始参数和一个slice:
for i, v in enumerate(alist[4:], 4):
...
实际上,如果你得到 range
对象,从中切出一个切片并不是什么大问题,因为 range(n)[:4]
仍然是 range
对象(as @MosesKoledoye提到它是 Python 3 功能 )。但是如果你有一个列表,为了不创建新列表你可以选择itertools.islice
,它将return迭代器。
from itertools import islice
for index, item in enumerate(islice(range(20), 4, None)):
print(index, item)
输出
0 4
1 5
2 6
3 7
4 8
...