Абсолютное соответствие строк в Python - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть список имен людей в списке, имена уникальны, но иногда имя может появляться после фамилии и наоборот.list[0]="Albert Einstein" and list[5]="Einstein Albert"
но, наконец, я хочу одну уникальную запись для каждого имени, которое я пробовал редактировать dist, но возвращаемое значение может варьироваться в широком диапазоне, поэтому бесполезно, пожалуйста, предложите хороший модуль для сопоставления строк в python

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Другой способ, который также не гарантирует, что порядок частей имени будет сохранен при отсутствии дубликата:

>>> name_list = ["Albert Einstein", "Einstein Albert", "Abe Lincoln", "Lincoln Abe"]
>>> list(set(' '.join(sorted(n.split())) for n in name_list))
['Abe Lincoln', 'Albert Einstein']

Алгоритм

  1. Для каждого имени n, разберите его на части (n.split()), разберите части (sorted(n.split())) и соедините их (' '.join(sorted(n.split()))).Дубликаты теперь будут иметь то же представление
  2. Сделать из полученного генератора set для удаления дубликатов
  3. Преобразовать временный set обратно в список (хотя это может быть и не обязательно)).
1 голос
/ 14 февраля 2012
>>> x = ["Albert Einstein", "test 1 s 2", "Einstein Albert", "foo bar baz", "baz foo bar"]
>>> list(set(' '.join(sorted(s.split())) for s in x))
['bar baz foo', '1 2 s test', 'Albert Einstein']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...