繁体   English   中英

list1的每个元素的列表总和,而list2中的所有元素

[英]Sum of lists for each element of list1 with all in list2

我想要使​​脚本能够从文件中读取行,而不是从每一行中获取切片,将1行中的所有切片与2行中的所有切片进行组合,然后将上一步中的所有切片与第三行进行合并。

例如,我们有

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结合,依此类推。

使用ittertools

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))

这将为您提供所有组合,然后您可以将所有组合加入字符串中。

我使用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]
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 ,并且lst combine()函数将生成各种组合,然后将结果作为列表返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM