如何从数组中删除随机元素。 Python

Posted

技术标签:

【中文标题】如何从数组中删除随机元素。 Python【英文标题】:How to remove a random element from an array. Python 【发布时间】:2019-02-18 16:34:24 【问题描述】:

所以我将首先解释问题的背景。

我有一个填充了多个字符串的数组,我想从该数组中选择随机元素,但是一旦选择了一个元素,就无法再次选择它。我的解决方案是简单地从数组中删除它。

我试过了:

dogs_array =['Bob', 'Fred', 'Jeff', 'Rick', 'Alice', 'Joe','Max', 'Will']
for x in range(3):
    i  = random.randint(0, 7)
    print(dogs_array[i])
    dogs_array.remove(i)

但是我收到错误:ValueError: list.remove(x): x not in list

我该怎么办?

【问题讨论】:

这是一个列表而不是一个数组 del dogs_array[i] 【参考方案1】:

如果您愿意为此使用numpy,函数np.random.choice 允许您选择样本的大小,而不是像您尝试的那样循环通过range(3),并且参数replace=False 保证您不会两次选择同一个:

import numpy as np

dogs_array =['Bob', 'Fred', 'Jeff', 'Rick', 'Alice', 'Joe','Max', 'Will']

my_selection = np.random.choice(dogs_array, size=3, replace=False)

>>> my_selection
array(['Fred', 'Alice', 'Jeff'], dtype='<U5')

【讨论】:

【参考方案2】:

对于那些寻找问题答案的人(np.array,而不是列表:))这可能会有所帮助

import random 
import numpy as np

dogs_array =np.array([[1,2,3],[4,5,6],[7,8,9]])
i  = random.randint(0, len(dogs_array ))
my_set = dogs_array [i]
dogs_array = np.delete(dogs_array, np.arange(i,i+len(my_set),1)).reshape([-1,len(my_set)])

【讨论】:

【参考方案3】:

如何使用pop 方法,非常适合您在这里所做的:

import random

dogs = ['Bob', 'Fred', 'Jess', 'Rick', 'Alice', 'Joe', 'Max', 'Will']

for x in range(3):
    selection = random.randint(0, len(dogs)-1)
    goner = dogs.pop(selection)
    print(goner)

输出

(xenial)vash@localhost:~/python$ python3.7 pop.py
Max
Bob
Joe

当使用 pop 时,您需要使用 len,因为列表会改变大小,并且您需要一个随机 int 来表示新的列表大小。

【讨论】:

【参考方案4】:

Python 中的 remove 方法接受元素,而不仅仅是索引。 如果您使用dogs_array.remove(dogs_array[i]),您的解决方案将有效

【讨论】:

听起来有点矫枉过正,不是吗? 嗯,这只是打印 'None' 3 次。 (?)

以上是关于如何从数组中删除随机元素。 Python的主要内容,如果未能解决你的问题,请参考以下文章

php中怎样从一个数组中随机取一个元素出来呢?

如何使用python从数组中删除特定元素

如何使用Python随机丢弃集合中的多个元素?

如何从数组中删除随机项,然后将其从数组中删除,直到数组为空

python中怎么从一个列表中可重复的随机抽取元素构成新列表?

从数组中随机选择3个元素