我想从字符串中剪切随机字母。
鉴于 S = “你好”
我想从's'中选择没有替换的元素,但保留索引号。
例如
>>> random.sample(s,len(s))
['w', 'h', 'o', 'd', 'y']
接近我想要的,但我实际上更喜欢像
这样的东西[('w',2),('h',0),('o',1),('d',3),('y',4)]
带字母索引对。这很重要,因为同一个字母不止一次出现在's'中。 ie)“字母”,其中't'出现两次,但我需要区分第一个't'和第二个。
理想情况下,我实际上只需要生成/选择字母,因为我需要它们但是一次加扰和计算所有字母(即:在如上所示的列表中)是可以的。
答案 0 :(得分:17)
>>> random.sample(list(enumerate(a)), 5)
[(1, 'o'), (0, 'h'), (3, 'd'), (2, 'w'), (4, 'y')]
答案 1 :(得分:9)
您可以在采样前枚举列表:
>>> random.sample(list(enumerate(l)), 5)
[(1, 'o'), (2, 'w'), (0, 'h'), (3, 'd'), (4, 'y')]
答案 2 :(得分:3)
这样做可能更容易:
def sample_with_indices(s):
indices = range(len(s))
random.shuffle(indices)
return [(s[i], i) for i in indices]
这将基本上改变字符串的所有索引,然后只返回该索引处的字符。从角色到指数要困难得多。