提问人:Dasher Love 提问时间:2/23/2023 更新时间:2/24/2023 访问量:120
单词在设定位置的排列
permutations with words at set positions
问:
我正在尝试编写一个脚本,该脚本可以创建所有单词的排列,其中一些位于设定的位置。我基本上是在尝试恢复我的 12 个单词助记词种子,其中我有几个额外的字母,但我知道一些字母的位置,例如,我知道单词 1 是野生的,单词 5 是脚本,最后一个单词是受伤的。我有 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 中生成器的完美用例。您可以将生成器视为在给定索引值的情况下创建某些值的规则,而不是一次创建所有内容。请参阅此处的示例:了解 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”,一旦它遍历了所有可能的排列。
评论
for
while
for indices in itertools.permutations(range(0, 12))
while True:
评论