python中的绝对字符串匹配

时间:2012-02-13 20:07:01

标签: python string

我在列表中列出了人名,名称是唯一的,但有时名字可能出现在姓后,反之亦然。 list[0]="Albert Einstein" and list[5]="Einstein Albert"
但最后我希望每个名字都有一个唯一的条目 我尝试编辑dist但返回的值可能会在很宽的范围内变化,因此无用 请在python中建议好的字符串匹配模块

2 个答案:

答案 0 :(得分:2)

另一种方法也不能保证如果没有重复,名称部分的顺序将被保留:

>>> 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 :(得分:1)

>>> 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']