gpt4 book ai didi

python - 从列表中弹出随机元素的最pythonic方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:40:27 31 4
gpt4 key购买 nike

假设我有一个长度未知的列表 x,我想从中随机弹出一个元素,以便列表之后不包含该元素。最pythonic的方法是什么?

我可以使用 poprandom.randintlen 的一个相当不方便的组合来做到这一点,并且希望看到更短或更好的解决方案:

import random
x = [1,2,3,4,5,6]
x.pop(random.randint(0,len(x)-1))

我想要实现的是从列表中连续弹出随机元素。 (即,随机弹出一个元素并将其移至字典,随机弹出另一个元素并将其移至另一字典,...)

请注意,我使用的是 Python 2.6,并没有通过搜索功能找到任何解决方案。

最佳答案

首先,您似乎在做的事情看起来并不像 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

一般来说,如果您使用更实用的样式而不是改变状态(就像您对列表所做的那样),您通常可以更优雅地表达您的程序。

关于python - 从列表中弹出随机元素的最pythonic方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048069/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com