Ale*_*lli 53
永远不要改变你正在循环的容器,因为容器上的迭代器不会被告知你的改动,正如你所注意到的那样,很可能产生一个非常不同的循环和/或一个不正确的循环.在正常情况下,循环容器的副本会有所帮助,但在你的情况下很明显你不需要它,因为容器在循环的50个腿后将是空的,如果你再尝试弹出,你会得到一个例外.
什么是明确的,你想要实现什么样的行为,如果有的话?!也许你可以用while... 来表达你的欲望?
i = 0
while i < len(some_list):
print i,
print some_list.pop(0),
print some_list.pop(0)
Run Code Online (Sandbox Code Playgroud)
Ewa*_*odd 42
我曾经被(别人的)"聪明"代码所咬,试图在迭代时修改列表.我决定在任何情况下都不会这样做.
您可以使用切片运算符mylist[::3]跳过列表中的每个第三项.
mylist = [i for i in range(100)]
for i in mylist[::3]:
print(i)
Run Code Online (Sandbox Code Playgroud)
关于我的示例的其他要点与python 3.0中的新语法有关.
Python 3.0 range()现在的行为类似于xrange(),但它适用于任意大小的值.后者不再存在.
试试这个.它避免了改变你正在迭代的东西,这通常是代码味道.
for i in xrange(0, 100, 3):
print i
Run Code Online (Sandbox Code Playgroud)
见xrange.
小智 8
使用while循环检查数组的真实性:
while array:
value = array.pop(0)
# do some calculation here
Run Code Online (Sandbox Code Playgroud)
它应该没有任何错误或有趣的行为.