如何获得python列表中具有不同值的元素的随机位置?

如何获得python列表中具有不同值的元素的随机位置?,python,random,Python,Random,假设一个python列表,例如:l=[1,1,1,2,2,3,3,3,4,4](不一定对列表进行排序) 我想在列表中随机选择n不同元素的位置 例如,假设n=3,因此我想选择列表中三个不同元素的位置 一个解决方案是:位置0,4,8分别与三个不同的元素值1,2,4相关 在Python中,最有效的方法是什么?一种方法是对列表进行洗牌,并按顺序获取值 import random l = [1,1,1,2,2,3,3,3,4,4] random.shuffle(l) n = 3 arr = [] f

假设一个python列表,例如:
l=[1,1,1,2,2,3,3,3,4,4]
(不一定对列表进行排序)

我想在列表中随机选择
n
不同元素的位置

例如,假设
n=3
,因此我想选择列表中三个不同元素的位置

一个解决方案是:位置0,4,8分别与三个不同的元素值1,2,4相关


在Python中,最有效的方法是什么?

一种方法是对列表进行洗牌,并按顺序获取值

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)

您想要从列表中随机索引吗?在一定范围内使用
sample
方法

import random

l = [1,1,1,2,2,3,3,3,4,4]
n = 3

random.sample(range(len(l)), n)

您可以创建
值:索引
字典,其中
是列表
l
中的唯一值,
索引
l
的索引列表。然后,您可以从
n
随机选择的唯一值的每个
值的
索引
列表中获取随机索引:

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)

我想你可以先创建一个新的列表,每个值只包含一次,然后从中随机取值

试试看:

l = list(set([1,1,1,2,2,3,3,3,4,4]))

现在,您可以使用此处显示的方法,从列表中获取n个随机元素,您可以知道您将获得差异值

您希望随机性如何分布?例如,如果您有
[1,2,2,2,2,2,2,2]
,并且您选择了
n=1
,那么所有索引的可能性是否相同,或者您是否希望一半时间的答案为0?请参阅。堆栈溢出不是为了替换现有的文档和教程。
random
包的文档中介绍了各种随机选择方法。这如何保证索引对应不同的值?我需要选择索引而不是值。好的。然后忽略此应答。应根据其各自的值选择索引。应根据其各自的值选择索引。我需要选择索引而不是值。因此,在找到每个值的索引后,它开始变得复杂。相反,您可以使用一个简单的while循环来获取随机索引,并检查它们的值是否被选中,直到您获得足够的索引为止。如果你感兴趣的话,我可以给你这个密码。你的答案是准确的。我在考虑是否可以只生成3个随机数。在您的答案中,生成了6个随机数:3个随机数获得3个值(在“样本”函数中),3个随机数获得位置(3次调用“选择”函数)。