Python实现固定位置单词排列,用于恢复12词助记词种子
高效生成固定位置的助记词排列脚本
核心思路
- 拆分固定位置与可用单词:将已知的3个固定单词从候选列表中移除,得到可自由排列的单词池
- 精准生成目标排列:仅对剩余9个需要填充的位置,从可用单词池中选9个生成排列(而非全量15词排列)
- 迭代处理结果:用迭代器逐个生成排列,避免一次性加载所有结果耗尽内存
完整代码示例
from itertools import permutations # 定义固定位置的单词(注意:Python列表是0索引,第1位对应索引0,第5位对应4,第12位对应11) fixed_positions = { 0: 'wild', 4: 'script', 11: 'hurt' } # 替换成你实际的15个候选单词 candidates = [ 'wild', 'script', 'hurt', 'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew', 'kiwi', 'lemon', 'mango', 'nectarine' ] # 过滤出可用于填充剩余位置的单词(移除已固定的3个) available_words = [word for word in candidates if word not in fixed_positions.values()] # 计算需要填充的位置(总12位减去固定的3位) total_mnemonic_length = 12 empty_positions = [i for i in range(total_mnemonic_length) if i not in fixed_positions.keys()] # 检查可用单词数量是否足够(需要9个,候选去掉3个后应该剩12个,满足需求) if len(available_words) < len(empty_positions): raise ValueError("可用单词数量不足,无法填充剩余位置") # 逐个生成有效排列,避免内存过载 for perm in permutations(available_words, len(empty_positions)): # 初始化助记词列表 mnemonic = [None] * total_mnemonic_length # 填充固定位置 for pos, word in fixed_positions.items(): mnemonic[pos] = word # 填充剩余位置 for idx, pos in enumerate(empty_positions): mnemonic[pos] = perm[idx] # 这里替换成你需要的操作:打印/写入文件/验证助记词 print(' '.join(mnemonic)) # 写入文件示例(推荐用这个,避免刷屏) # with open('valid_mnemonics.txt', 'a', encoding='utf-8') as f: # f.write(' '.join(mnemonic) + '\n')
关键细节说明
- 索引对应关系:必须注意Python的0索引规则,第1位助记词对应列表索引0,第5位对应索引4,最后一位(第12位)对应索引11
- 内存优化:
permutations返回的是迭代器,每次只生成一组排列,不会一次性把大量结果加载到内存 - 排列范围控制:仅针对剩余9个位置生成排列,相比全15词排列,计算量大幅降低
- 唯一性保障:
permutations生成的是不重复元素的有序排列,符合助记词无重复单词的规则
内容的提问来源于stack exchange,提问作者Dasher Love
相关产品推荐
相关产品推荐

