查找具有常见起始元素的子列表 - python

时间:2018-06-13 12:16:26

标签: python python-3.x algorithm lcs

我有一个嵌套列表:

lists =[['a','b','c'],
        ['a','b','d'],
        ['a','b','e'],
        ['с','с','с','с']]

我需要查找具有2个或更多个共同(2个或更多个)第一个元素的子列表,从这些元素创建一个字符串,并从子列表中创建一个字符串,它不包含公共的第一个元素。子列表可以按不同的顺序排列,因此我猜想只检查下一个或上一个元素是错误的方法。期望的输出:

   [['a b','c'],
    ['a b','d'],
    ['a b','e'],
    ['с с с с']]

我尝试了一些for循环,但没有成功。 我目前不知道,从哪里开始,所以任何帮助将不胜感激。谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

可能不是最有效的方法,但你可以尝试这样的事情:

def foo(l,n):
    #Get all of the starting sequences
    first_n = [list(x) for x in set([tuple(x[:n]) for x in l])]

    #Figure out which of those starting sequences are duplicated
    duplicates = []
    for starting_sequence in first_n:
        if len([x for x in l if x[:n] == starting_sequence])>2:
            duplicates.append(starting_sequence)

    #make changes
    result = []
    for x in l:
        if x[:n] in duplicates:
            result.append([" ".join(x[:n])]+x[n:])
        else:
            result.append([" ".join(x)])

    return result

Set没有重复,但是set的元素必须是可以清除的。由于列表是不可删除的,因此我将它们转换为元组然后再转换为列表。