Python: 无放回选择元素

8 投票
3 回答
10080 浏览
提问于 2025-04-15 21:18

我想从一个字符串中随机抽取字母。

比如说,给定字符串

s="howdy"

我希望从's'中选择元素,但不重复选择,并且要保留它们的索引位置。

举个例子,

>>> random.sample(s,len(s))
['w', 'h', 'o', 'd', 'y']

这个接近我想要的结果,但我其实更希望得到像这样的

[('w',2), ('h',0), ('o',1), ('d',3), ('y',4)]

字母和索引的配对。这一点很重要,因为在's'中同一个字母可能出现多次。比如说“letter”这个词,里面的't'出现了两次,但我需要区分第一个't'和第二个't'。

理想情况下,我只需要在需要的时候生成或选择字母,不过一次性打乱和计算所有字母(比如像上面那样放在一个列表里)也是可以的。

3 个回答

3

这样做可能会更简单:

def sample_with_indices(s):
    indices = range(len(s))
    random.shuffle(indices)
    return [(s[i], i) for i in indices]

这个方法基本上是把字符串中的所有位置打乱,然后返回那个位置上的字符。把字符转换成位置就稍微复杂一些。

9

你可以在抽样之前先列出这个列表的所有内容:

>>> random.sample(list(enumerate(l)), 5)
[(1, 'o'), (2, 'w'), (0, 'h'), (3, 'd'), (4, 'y')]
19
>>> random.sample(list(enumerate(a)), 5)
[(1, 'o'), (0, 'h'), (3, 'd'), (2, 'w'), (4, 'y')]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答