假设有一个python列表,例如:l = [1,1,1,2,2,3,3,3,4,4](不一定对列表进行排序)。
我想在列表中随机选择n不同元素的位置。
例如,假设n=3,所以我想选择列表中三个不同元素的位置。
一种解决方案是:位置0,4,8分别对应于三个不同的元素值1,2,4。
在Python中执行此操作的最有效方法是什么?
发布于 2021-05-12 07:55:55
一种方法是打乱列表,并将值按顺序排列。
import random
l = [1,1,1,2,2,3,3,3,4,4]
random.shuffle(l)
n = 3
arr = []
for i in range(n):
arr.append(i)发布于 2021-05-12 08:02:57
您想要列表中的随机索引吗?在一定范围内使用sample方法。
import random
l = [1,1,1,2,2,3,3,3,4,4]
n = 3
random.sample(range(len(l)), n)发布于 2021-05-12 08:05:27
您可以创建一个value : indices字典,其中value是列表l中的唯一值,indices是l中value的索引列表。然后,您可以从n随机选择的唯一值的每个value的indices列表中获取随机索引:
from collections import defaultdict
from random import sample, choice
index_map = defaultdict(list)
for i, v in enumerate(l):
index_map[v].append(i)
n = 3
# choose `n` random unique values from `l`
rand_values = sample(list(index_map), n)
# choose a random index of each of the `n` random values
rand_indices = [choice(index_map[v]) for v in rand_values]
print(rand_indices)https://stackoverflow.com/questions/67495678
复制相似问题