0

我正在尝试制作一个简单的迭代器,它在列表中循环并从 python 中的列表中返回三个连续的数字,但我得到了非常奇怪的结果 - 代码只有在列表中的数字按升序排列时才能正常工作。

import itertools
c=[0,1,2,3,0,5,6]
counter=itertools.cycle(c)
def func(x):
    if x==len(c)-1:
        return c[x],c[0],c[1]
    elif x==len(c)-2:
        return c[x],c[len(c)-1],c[0]
    else:
        return c[x],c[x+1],c[x+2]

for i in range(len(c)+2):
    print(func(next(counter)))

'我试图创建一个简单的迭代器,它循环遍历一个列表并从 python 中的列表中返回三个连续的数字,但我得到了非常奇怪的结果 - 代码只有在列表中的数字按升序排列时才能正常工作。Atom 打印以下内容第 5 个元组。请帮忙..

(0, 1, 2)
(1, 2, 3)
(2, 3, 0)
(3, 0, 5)
(0, 1, 2)
(5, 6, 0)
(6, 0, 1)
(0, 1, 2)
(1, 2, 3)

'

4

1 回答 1

0

我相信您混淆了 c 和索引的值。您似乎func期望传递一个索引,但实际上您是从c. 注意:counter循环 c 的而不是索引。

另请注意,在 python 中,您可以使用负索引,因此您可以写c[-1]c[len(c) - 1].

于 2021-04-16T07:44:23.950 回答