#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
?