Python:选择一个元素而不替换

Python:选择一个元素而不替换,python,Python,我想从字符串中剪切随机字母 给定 s=“你好” 我想从“s”中选择元素,不替换,但保留索引号 比如说 >>> random.sample(s,len(s)) ['w', 'h', 'o', 'd', 'y'] 很接近我想要的,但我更喜欢 [('w',2),('h',0),('o',1),('d',3),('y',4)] 具有字母索引对。这一点很重要,因为同一个字母在“s”中出现了不止一次。即“字母”,其中“t”出现两次,但我需要区分第一个“t”和第二个“t” 理想情况下,我实

我想从字符串中剪切随机字母

给定 s=“你好”

我想从“s”中选择元素,不替换,但保留索引号

比如说

>>> random.sample(s,len(s))
['w', 'h', 'o', 'd', 'y']
很接近我想要的,但我更喜欢

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

具有字母索引对。这一点很重要,因为同一个字母在“s”中出现了不止一次。即“字母”,其中“t”出现两次,但我需要区分第一个“t”和第二个“t”


理想情况下,我实际上只需要根据需要生成/拾取字母,但一次对所有字母进行置乱和计算(即:在如上所示的列表中)是可以的。

您可以在采样之前枚举列表:

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

这样做可能更容易:

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

这将基本上洗牌一个字符串的所有索引,然后只返回该索引处的字符。从字符到索引有点困难。

我想提出类似的建议,但你应该使用上面的
list(enumerate(s))
技巧:
返回random.shuffle(list(enumerate(s))
是的,它真正提供的唯一好处是,如果你想做一些有趣的事情,选择你想使用的索引,然后你可以这样做,后面是最后两行。
def sample_with_indices(s):
    indices = range(len(s))
    random.shuffle(indices)
    return [(s[i], i) for i in indices]