如何从数组中删除随机元素。 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的主要内容,如果未能解决你的问题,请参考以下文章