Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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/9/loops/2.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-使用popleft()遍历deque_Python_Loops_Deque - Fatal编程技术网

Python-使用popleft()遍历deque

Python-使用popleft()遍历deque,python,loops,deque,Python,Loops,Deque,我一直在寻找在使用popleft使用第一个元素并减少每次迭代的队列的同时迭代deque的最佳方法。我基本上想在deque中保留第一个,使用这个值运行一些代码,然后执行相同的过程,直到deque中没有更多的值 我在网上找到的最好方法是使用try-and-catch块捕获索引器: try: while mydeque: value = mydeque.popleft() except IndexError: # handle empty mydeque 当然,抛出异常

我一直在寻找在使用popleft使用第一个元素并减少每次迭代的队列的同时迭代deque的最佳方法。我基本上想在deque中保留第一个,使用这个值运行一些代码,然后执行相同的过程,直到deque中没有更多的值

我在网上找到的最好方法是使用try-and-catch块捕获索引器:

try: 
    while mydeque: 
        value = mydeque.popleft()
except IndexError: 
# handle empty mydeque
当然,抛出异常不是最好的方法。我会捕获while循环中发生的任何索引器,这并不理想。使用for循环不起作用,因为我会在迭代过程中修改deque


执行此操作的最佳方法是什么?

mydeque
为空时,它在while循环中解析为
False

while mydeque:
    value = mydeque.popleft()

这将贯穿
mydeque
中的所有值您可以将try/except放在while循环中;这样,您可以确保它只捕获popleft抛出的索引器


您可以使用
而mydeque:…
作为@slitlynybled的建议,或者
而0
基本上是一样的

while 0 < len(mydeque):
    value = mydeque.popleft()
而0
什么索引器?
while
循环在元素用完时结束。如果
mydeque
为空时无效,则不需要。但是如果不是,那么当
mydeque
为空时,测试不应该是其他错误的东西吗?显然,我的代码中有另一个问题。感谢您的及时回复。由于条件检查,
popleft
不会引发异常:如果deque为空,则循环结束。deque没有接受整数的
pop
方法。
pop()
popleft()
之间的区别在于deque的哪一侧是返回的元素
deque.pop()
从deque的右侧移除并返回一个元素
deque.popleft()
从deque的左侧移除并返回一个元素。在这两种情况下,如果不存在任何元素,则会引发一个索引器。@user2357112,
pop()
,或
popleft()
都不会将整数作为参数(pop正好位于您共享的文档链接中的popleft上方)@稍微有点混淆,我想你会把它们与旋转(n)
混淆,其中n是步数,符号(正数或负数)是旋转方向。@buran:是的,我知道popleft不接受整数。我没有说它需要一个整数。我认为更可能的情况是,稍微有点混乱的事情与列表混淆,而不是他们与
旋转
混淆;列表中有一个可选整数的
pop
,没有
popleft
@user2357112,对不起,我误解了你的评论。是的,您是对的-Slitlynybled可能将deque与list混合在一起。只使用deque对象的真值会更简单、更有效。@user2357112实际上我认为这个答案中的代码会更有效-它不必在每次循环中都检查deque实例的真值
while 0 < len(mydeque):
    value = mydeque.popleft()