2010-04-06 48 views
7

我想從一個字符串中隨機分割字母。Python:挑選一個沒有替換的元素

鑑於 S =「你好」

我想挑從元素的'無需更換,但保留索引號。

例如

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

接近我想要的,但我更喜歡像

[( 'W',2),( 'H',0),(」 (''',4)]

具有字母 - 索引對。這很重要,因爲同一個字母不止一次出現在's'中。即)「信」,其中「t」出現兩次,但我需要區分第一個「t」和第二個。

理想情況下,我實際上只需要生成/選擇字母,因爲我需要它們,但一次加擾和計算所有字母(即:如上所示的列表中)是可以的。

回答

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

你可以只採樣之前列舉的清單:

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

它可能更容易做這樣的事情:

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

這將基本上洗牌的字符串的所有索引和那麼只需返回該索引處的字符。從角色到索引要稍微困難一些。

+1

我想提出類似的建議,但是你應該使用上面的'list(enumerate(s))'技巧:'return random.shuffle(list(enumerate(s)))' – jemfinch 2010-04-06 20:36:18

+0

是的,唯一的好處這真的提供了,如果你不想挑選你想要使用的索引來做些簡單的事情,那麼你可以做到這一點,後面跟着最後兩行。 – 2010-04-06 20:38:08