Python: 无放回选择元素
我想从一个字符串中随机抽取字母。
比如说,给定字符串
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')]
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。