Python匿名化使用random.shuffle列表中的列表

时间:2013-04-30 06:12:33

标签: python list shuffle

这是我的编码:

word = ma['vals']
shuffled = list(word)                   
random.shuffle(word)
shuffled = ''.join(random.sample(word, len(word)))                      
newval = shuffled           

结果为BALLOONSFLOWERSGIFTSFLOWERSCANDYFLOWERSBALLOONSBALLOONS。当我想要结果时,例如,如果我正在改组gifts,那么结果将是stgfi

3 个答案:

答案 0 :(得分:3)

评论太长了,所以我会把它作为答案,尽管不是。

对不起,请不要采取错误的方式,但这是我15年来见过的最糟糕的代码。你应该至少再次阅读一本基础教程,以便更好地掌握正在发生的事情,因为这让我感觉就像你只是随意输入内容而不试图理解他们所做的事情。

让我们从头开始:

ma['vals'] = [balloons, flowers, gifts, candy]

好的,所以我认为ma是一本字典。您现在可以在代码中使用该字典。为什么会这样?

word = ma['vals']

现在您只需将字词设为[balloons, flowers, gifts, candy]即可。为什么不直接这样做?另外,不要调用单词列表“word”。这意味着它是一个字,但你把它作为一个列表。

shuffled = list(word) 

为什么要列出(单词)?它已经是一个列表了。您现在所做的就是设置:

shuffled = [balloons, flowers, gifts, candy]

当你不这样做的时候,你就把它称为洗牌。

random.shuffle(word)

现在你洗牌了。但是你没有使用改组变量,你使用了变量这个词。

shuffled = ''.join(random.sample(word, len(word)))   

现在你将shuffled设置为另一个东西,所以你永远不会使用第一个shuffled。此外,从与列表一样长的列表中生成随机样本与调整它的内容相同,并且列表已经被洗牌。

newval = shuffled

你为什么这样做?

您的所有代码实际上都可以压缩为:

newval = [balloons, flowers, gifts, candy]
random.shuffle(newval)

这将具有相同的最终结果:您将有一个随机洗牌的单词列表。

因此,三分之二的代码实际上最终没有任何。上面也清楚地说明了为什么你的代码行为不像你想象的那样。当你想要改变一个单词时,你可以随机播放一个单词列表。

答案 1 :(得分:1)

如果您想随机选择一个单词,然后随机随机播放该单词的字母:

In [27]: letters = list(random.choice(word))

In [28]: random.shuffle(letters)

In [29]: ''.join(letters)
Out[29]: 'blanolos'

此处,word与脚本中的变量相同(即列表的单词)。

答案 2 :(得分:1)

您必须从字符串创建列表。例如,在您的情况下,ma["vals"][0]将访问字符串“balloons”。然后,您可以通过调用list并传入字符串将其转换为列表。函数random的命名可选参数random.shuffle是基于其进行排序的函数。 random.shuffle修改了传递到random.shuffle的列表,因此您在列表中调用join而不是调用random.shuffle的结果。

>>> wordList = list(ma["vals"][0])) #"balloons"
>>> random.shuffle(wordList,random=random.random)
>>> ''.join(wordList)
'oboanlls'