我想让脚本从文件中读取行,而不是从每一行中取段,将1行中的所有切片与2行中的所有切片结合起来,然后将前一步的所有切片与第3行合并。
例如,我们有
Stackoverflow (4)
python (3)
question (3)我得到了第一张单子,上面写着(数字)字母。
lst = ['Stac', 'tack', 'acko', 'ckov', 'kove', 'over', 'verf', 'erfl', 'rflo', 'flow']然后我需要把它和第二个列表结合起来:
lst = ['pyt', 'yth', 'tho', 'hon']期望产出:
finallist = ['Stacpyt', 'tackpyt', 'ackopyt', 'ckovpyt', 'kovepyt', 'overpyt', 'verfpyt', 'erflpyt', 'rflopyt', 'flowpyt' 'Stacyth', 'tackyth', 'ackoyth', 'ckovyth', 'koveyth', 'overyth', 'verfyth', 'erflyth', 'rfloyth', 'flowyth', ..... , 'erflhon', 'rflohon', 'flowhon']然后再加上第三份清单:
lst = ['que', 'ues', 'est', 'sti', 'tio', 'ion']
finallist = ['Stacpytque', 'tackpytque', 'ackopytque', 'ckovpytque', 'kovepytque', 'overpytque', 'verfpytque', 'erflpytque', 'rflopytque', .... 'erflhonion', 'rflohonion', 'flowhonion']我坚持到了我需要以合并的结果进入决赛的地步。
我正在尝试这样的代码片段,但这是错误的:
for i in lst:
for y in finallist:
finallist.append(i + y)因此,如果finallist是空的-它应该在第一个循环迭代中复制lst,如果finallist不是空的,它应该将每个元素与lst等结合起来。
发布于 2015-10-17 08:27:22
为了从文件中获取单词和整数值,我使用了re.match()。
然后,我计算所有切片子字,并将它们添加到一个列表中,然后将列表添加到一个全局列表中。
最后,我计算了所有您要寻找的感谢itertools.product()的可能性,它的行为就像嵌套的for -循环。
然后,.join()获得的元组,然后得到您想要的最终列表。
from itertools import product
from re import match
the_lists = []
with open("filename.txt", "r") as file:
for line in file:
m = match(r'(.*) \((\d+)\)', line)
word = m.group(1)
num = int(m.group(2))
the_list = [word[i:i+num] for i in range(len(word) - num + 1)]
the_lists.append(the_list)
combinaisons = product(*the_lists)
final_list = ["".join(c) for c in combinaisons]发布于 2015-10-17 08:02:48
import itertools
list1 = ['Stac', 'tack', 'acko', 'ckov', 'kove', 'over', 'verf', 'erfl', 'rflo', 'flow']
list2 = ['pyt', 'yth', 'tho', 'hon']
list3 = ['que', 'ues', 'est', 'sti', 'tio', 'ion']
final_list = list(itertools.product(list(itertools.product(list1,list2)),list3))这将给你所有的组合,然后你可以加入所有他们得到你的字符串。
发布于 2015-10-17 08:42:01
import itertools
def combine(lst):
result = list(itertools.product(*lst))
result = [''.join(item) for item in result]
return result
list1 = ['Stac', 'tack', 'acko', 'ckov', 'kove', 'over', 'verf', 'erfl', 'rflo', 'flow']
list2 = ['pyt', 'yth', 'tho', 'hon']
list3 = ['que', 'ues', 'est', 'sti', 'tio', 'ion']
lst = [list1, list2, list3] # append more list to lst, then pass lst to combination
print combine(lst)将所有候选列表附加到lst中,combine()函数将生成各种组合,然后将结果作为列表返回。
https://stackoverflow.com/questions/33184240
复制相似问题