首页 > 解决方案 > 如何“清理”,itertools组合输出?

问题描述

我正在尝试通过将每个元素(行)与其他元素组合来合并一些文本文件。

我有类似的东西:

wordlist.txt -> alfa
                bravo
                charlie

numlist.txt -> 123
               234
               345

spec.txt -> ?
            !
            %
            $

我正在使用 itertools 来获取组合。

这是我的脚本:

row1 = []
f_w1 = open(dictionary_word, 'r')
for line in f_w1.readlines():
    line = line.split()
    row1.append(line)
  ... 

inputdata = row1, row2, row3

combinations = list(itertools.product(*inputdata))

combinations_path = input('Enter a directory to save the combinations file: ')

with open(combinations_path + "userscombinations.txt", 'w') as f:
    for s in combinations:
        f.write(str(s)+ '\n')

with open(combinations_path + "userscombinations.txt", 'r') as f:
    combinations = [line.rstrip('\n') for line in f]

print(combinations)

我需要获取一个文件,例如:

combinations.txt -> alfa123?
                    alfa123!
                    alfa123%
                    .......
                    charlie345$

但是使用 itertools 我得到类似的东西:

combinations.txt -> (['a'], ['1'], ['?'])
(['a'], ['1'], ['!'])
(['a'], ['1'], ['"'])

标签: pythonlistdictionarycombinations

解决方案


假设你有

words = ["alfa", "bravo", "charlie"]
nums = ["123", "456", "789"]
specs = ["?", "!", "%", "$"]

您可以使用"".join将每个组合减少为单个字符串。

from itertools import product

combinations = ["".join(x) for x in product(words, nums, specs)]

推荐阅读