我正在尝试编写一个脚本来创建单词的所有排列,其中一些在固定位置。我基本上是在尝试恢复我的 12 个单词助记符种子,其中我有一些额外的字母,但我知道一些字母的位置,例如,我知道单词 1 是 wild,单词 5 是 script,最后一个单词是 hurt .我有 15 个词想尝试排列,所以我得到
野生 permword1 permword2 permword3 脚本 permword6 permword7 permword8 permword9 permword10 permword11 伤害
` 我有 python 的基础知识。我只知道如何只打印单词的所有排列,但是这需要更长的时间并且还会打印一些甚至不可能的排列,因为其中一个排列在不同的位置有单词 5。我有我的单词列表,我只是想以更有效的方式恢复我的助记符种子,因为我最终创建了太多的排列,以至于我的笔记本电脑空间不足。我不希望被推荐 btcrecover,因为我有一些问题。
理想情况下,我会得到一个列表,
野生 permword1 permword2 permword3 脚本 permword6 permword7 permword8 permword9 permword10 permword11 伤害
野生 permword1 permword2 permword3 脚本 permword6 permword7 permword8 permword9 permword10 permword12 伤害
野生 permword1 permword2 permword3 脚本 permword6 permword7 permword8 permword9 permword10 permword13 伤害
提前感谢!
只是常规排列,但我不确定如何拆分其他单词,以便单词 5 始终是脚本。
我猜你的计算机用完“空间”的原因是你将所有创建的排列一次保存在内存中。这是 python 中生成器的完美用例。您可以将生成器视为在给定索引值的情况下创建一些值的规则,而不是一次创建所有内容。参见此处的示例:Understanding generators in Python
对于设置位置的单词,您可以为每个排列创建一个列表,然后插入您预先设置的单词。
我认为以下代码可以解决您的问题。在最后一行,我打印了排列,你可以用你想对每个排列做的任何事情替换它。
import itertools
permwords = [f"permword{ind+1}" for ind in range(0,15)]
def produce_partially_set(worlist):
worlist.insert(0, "wild")
worlist.insert(4, "script")
worlist.append("hurt")
return worlist
indices_perm = itertools.permutations(range(0,12)) # 12 unknown words in "solution"
while True:
indices = next(indices_perm)
permutation = [permwords[x] for x in indices]
mneumonic_seed = produce_partially_set(permutation)
print(mneumonic_seed)
PS:一旦遍历所有可能的排列,代码将抛出一个“StopIteration”。