首先,您似乎想要做的看起来不太像Pythonic。您不应该从列表的中间删除内容,因为列表在我所知道的所有Python实现中都是作为数组实现的,因此这是一项O(n)
操作。
如果您确实需要将此功能作为算法的一部分,则应检出blist
支持从中间高效删除的数据结构,例如。
在纯Python中,如果不需要访问其余元素,该怎么办就是先将列表随机播放,然后对其进行遍历:
lst = [1,2,3]
random.shuffle(lst)
for x in lst:
# ...
如果您 确实需要 其余部分(有点代码味道,恕我直言),至少您现在可以pop()
从列表末尾开始(快!):
while lst:
x = lst.pop()
# do something with the element
通常,如果您使用更具功能性的样式而不是改变状态(如对列表进行操作),则通常可以更优雅地表达程序。