首页 > 解决方案 > 蟒蛇虫?我做错了什么?

问题描述

我正在尝试制作一个简单的迭代器,它在列表中循环并从 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)

'

标签: pythonloopsiteration

解决方案


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

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


推荐阅读