【问题标题】:Find Similar Elements in List using Python使用 Python 在列表中查找相似元素
【发布时间】:2020-08-10 09:06:35
【问题描述】:

我需要使用 python 在列表中查找类似的项目。 (例如,“限制”类似于“限制”或“下载 ICD 文件”类似于“下载 ICD zip 文件”) 我真的希望我的结果与字符相似,而不是数字(例如“角度 1”与“角度 2”相似)。我列表中的所有这些字符串都以 '\0'

结尾

我想要做的是将每个项目拆分为空白,并查看是否有任何部分由数字组成。 但不知何故,它并没有像我希望的那样工作。

这是我的代码示例:

for k in range(len(split)):  # split already consists of splitted list entry
    replace = split[k].replace(
        "\\0", ""
    )  # replace \0 at every line ending to guarantee it is only a digit
    is_num = lambda q: q.replace(
        ".", "", 1
    ).isdigit()  # lambda i found somewhere on the internet
    check = is_num(replace)
    if check == True:  # break if it is a digit and split next entry of list
        break
    elif check == False:  # i know, else would be fine too
        seq = difflib.SequenceMatcher(a=List[i].lower(), b=List[j].lower())
        if seq.ratio() > 0.9:
            print(Element1, "is similar to", Element2, "\t")
            break

【问题讨论】:

  • 你是如何定义相似的?..你是否只想检查一个词的末尾是否有一个's'并进行比较,或者如果 2 个单词甚至包含 1 个相同的字母,它们是否会被认为是相似的?
  • 有点难回答,因为字符串可以有不同的长度,所以很难说匹配字符的数量。它们需要明显相似
  • 在尝试编程之前,您需要先有一些想法,我建议您首先考虑您的程序需要什么样的相似性,然后为它编写代码。对于计算机来说,对人类理解有一个大致的了解是不够的,它需要一些逻辑。为了清楚起见,请考虑一下您的需求,在您确定需求之前不要开始考虑代码。

标签: python list difflib sequencematcher


【解决方案1】:

试试这个,它使用来自 difflib 的 get_close_matches 而不是 sequencematcher

from difflib import get_close_matches
a = ["abc/0", "efg/0", "bc/0"]
b=[]
for i in a:
    x = i.rstrip("/0")
    b.append(x)

for i in range(len(b)):
        print(get_close_matches(b[i], (b)))

【讨论】:

  • @doublesobig,这只是一个简单的 for 循环来检查每个元素,因此您会得到重复,请确保根据您的要求对其进行编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 2010-10-10
  • 2011-01-30
  • 1970-01-01
相关资源
最近更新 更多