поиск самой длинной уникальной записи из списка

#python

Вопрос:

У меня есть проблема, и я, похоже, не могу найти решение. Я сделал регулярное выражение для текста в свободной форме, и он возвращает несколько результатов, как показано ниже: a = [‘XY 621334’, ‘XY 621’, ‘XY 62133’, ‘AB 123’, ‘AB 1234’]

мой желаемый текст-это самые длинные уникальные значения: результат = [‘XY 621334’, ‘AB 1234’]

не можете понять, как это сделать?

Я попробовал нижеприведенный цикл, но он работает только для первого типа комбинации » XY….»

 long = ''
len_long = 0
result = []
for i in range(len(a)):
    for j in range(i 1,len(a)):
        if a[i] in a[j]:
            if len(a[j])>len_long:
                long = a[j]
                len_long = len(a[j])
        elif a[j] in a[i]:
            if len(a[i])>len_long:
                long = a[i]
                len_long = len(a[i])
 

Комментарии:

1. Что вы пробовали до сих пор?

2. Не могли бы вы добавить свое определение «самой длинной уникальной записи»?

3. @OlvinRoght Из примера, те записи, которые не являются префиксами других записей.

Ответ №1:

Вот функция генератора, производящая строки, которые не являются префиксами других строк в списке:

 def unik(lst):
    lst.sort(reverse=True)
    pat = ""
    for s in lst:
        if not pat.startswith(s):
            yield s
        pat = s

list(unik(['XY 621334', 'XY 621', 'XY 62133', 'AB 123', 'AB 1234']))
# ['XY 621334', 'AB 1234']
 

Обратная сортировка гарантирует, что все префиксы появятся сразу после их совпадения.

Комментарии:

1. данные не определены

2. Незначительная опечатка — for s in data должна быть for s in lst ?