我想得到一个单词的字母的[[random排列,如果可能,否则这个单词本身。
如何有效地做到这一点?这是我现在拥有的
from itertools import permutations
import random
word = 'some_word'
permutations = [''.join(permutation) for permutation in permutations(word)]
random.shuffle(permutations)
scrambled_word = word
for permutation in permutations:
if permutation != word:
scrambled_word = permutation
break
[基本上,我只是获得单词所有排列的第一个排列。我将对许多单词进行此操作,但发现此方法效率低下。通常,没有必要获取给定单词的所有排列。排列,以便它看起来不会像原始单词。我记住,我可以以某种方式进行迭代的随机排列,从中可以检索第一个排列。如何在Python中完成?
permutations
的函数itertools
是可迭代的,但元素的排列顺序不是随机的。我需要一个[[random
random.sample
这不会阻止您偶尔找回原始单词,因为这是有效的排列。如果您不允许使用原始图片,则不会获得真正的随机样本。您可以根据需要过滤掉原始图像。如果您不喜欢收到的单词,请再试一次(确保您检测到所有字母都相同的情况):
scrambled_word = ''.join(random.sample(word, k=len(word)))
def scramble(word):
while True:
scrambled_word = ''.join(random.sample(word, k=len(word)))
if scrambled_word != word or all(c == word[0] for c in word):
return scrambled_word