Найти подсписки с общими стартовыми элементами - python - PullRequest
0 голосов
/ 13 июня 2018

У меня есть вложенный список:

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

Мне нужно найти подсписки с 2 или более общими (2 или более вхождениями) первыми элементами, создать из этих элементов одну строку и создать одну строкуиз подсписков, которые не содержат общих первых элементов.Подсписки могут идти в другом порядке, так что, я полагаю, неверная проверка следующего или предыдущего элемента.Желаемый результат:

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

Я пробовал некоторые циклы, но безуспешно.В настоящее время я не знаю, с чего начать, поэтому любая помощь будет оценена.Спасибо за ваше время!

1 Ответ

0 голосов
/ 13 июня 2018

Вероятно, не самый эффективный способ, но вы можете попробовать что-то вроде этого:

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

Наборы не имеют повторений, но элементы наборов должны быть хэшируемыми.Поскольку списки не подлежат изменению, поэтому я преобразовал их в кортежи, а затем снова в списки.

...