Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:到达末尾时,循环遍历列表中的元素_Python_List_Cycle - Fatal编程技术网

Python:到达末尾时,循环遍历列表中的元素

Python:到达末尾时,循环遍历列表中的元素,python,list,cycle,Python,List,Cycle,我有一个如下列表: a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10'] 我需要在这个列表中一次循环一个元素,但是当到达列表的末尾时,循环需要反转 例如,使用: 我得到: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10 但我需要的

我有一个如下列表:

a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']
我需要在这个列表中一次循环一个元素,但是当到达列表的末尾时,循环需要反转

例如,使用:

我得到:

01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10
但我需要的是:

01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 10, 09, 08, 07, 06, 05, 04, 03, 02, 01, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10
我需要在
a
中循环一个固定的次数,比如说200次。

你真的需要在列表中循环,就像永远向前和向后一样吗?还是仅仅是名单

print a + a[::-1]
我会照你说的做。内置函数也可以工作,但您需要
chain()
它,因为它返回一个迭代器,例如:

print list(itertools.chain(a, reversed(a)))
您可以对任意一个结果调用
itertools.cycle()
,以获得列表的无限迭代器,并将其反向连接起来

def forwardback(lst):
    tot = len(lst)
    while 1:
        for i in xrange(tot):
            yield lst[i]
        for i in xrange(tot-1,-1,-1):
            yield lst[i]
或者(使用
cycle
的方法,该方法适用于所有迭代器)

您可以选择您的
a
a
,例如:

from itertools import cycle, islice, chain

a = range(1, 11)
b = reversed(a)
c = cycle(chain(a, b))
d = list(islice(c, 100)) # `c` is infinite - hence the `islice` to stop at some point...
这给了你:

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

注意:如果
a
是一个可耗尽的迭代器,则需要先复制
a
。但举个例子,这样就可以了。

复制列表a,将其反转,然后追加

a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']
b = a[:]
b.reverse()
a = a + b
或者基于评论建议

a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']
b = a[::-1]
a = a + b

你需要这个是不确定的吗?@ScironicI需要它运行,直到外部
for
循环(未显示在问题中)耗尽其元素。Dimo414的解决方案应该可以工作,你可以循环使用。对不起,是我。我草率地误读了你的代码。看到范围(30)中的
i和前导零,认为您是许多没有显示实际数据的人之一。我取消了投票。如果您为范围(30)
中的uuu编写了
,那么就不会发生这种情况,顺便说一句,因为这是您不打算使用的值的约定。但这真的是我的错,我应该休息一下。不用担心,在意识到否决票已经消失后,我删除了关于否决票的问题。我将更改
,谢谢你的建议
.reverse()
不返回任何内容,因此不起作用。使用
a+a[:-1]
instead@Scironic如果是正确的,
a.reverse()
返回
None
。由于列表是可变的,因此您的编辑仍然不起作用,因此将其分配给新变量并将其反转会反转两个列表。您需要复制才能执行此操作,但使用反向切片更容易参见dimo414s答案,您可以使用反向切片:
a[:-1]
注意:
i
在第二个代码块中进行
生成lst[i]
时尚未定义。当您可以直接迭代iterables时,为什么要使用索引呢?您可以使用
reversed()
对任何iterable进行反向迭代,并在列表等对象上使用扩展切片表示法,例如
对v进行反向(已保存):
对v进行已保存[:-1]:
。谢谢。修正了打字错误。复制了以前的程序并对其进行了编辑。另外,您关于
反转的看法是正确的。我不知道它返回了一个迭代器。我不想用更多的空间重新创建列表。
a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']
b = a[:]
b.reverse()
a = a + b
a = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10']
b = a[::-1]
a = a + b