我创建了一个脚本来计算两个弦的Levenshtein距离。现在我想根据Levenshtein距离对字符串列表进行分组。 (如果字符串的距离低于阈值,则它们将在同一组中):
目前,我已经做了一些事情,但似乎没有奏效。这是一个伪代码:
for every string in list:
create a new cluster with this string
remove the string from the list
for every string in the remaining list:
if distance(string1,string2) < threshold:
add string2 to the cluster
remove string2 from the list
这是真正的代码,因为一些用户提出了这个问题:
cid = 0
clusters = {}
numb = range(len(mylist))
for i in numb:
cls = [mylist[i]]
numb.remove(i)
for j in numb:
if distance(mylist[i],mylist[j]) <= threshold:
cls.append(mylist[j])
numb.remove(j)
clusters[cid] = cls
cid+=1
cls = []
答案 0 :(得分:0)
您正在从正在迭代的列表中删除项目。这将改变索引并导致意外行为,您应该将所需的值复制到新列表,而不是修改您正在迭代的列表。
答案 1 :(得分:0)
以下是一些清理过的代码:
clusters = defaultdict(list)
numb = range(len(mylist))
for i in numb:
for j in range(i+1, len(numb)):
if distance(mylist[i],mylist[j]) <= threshold:
clusters[i].append(mylist[j])
clusters[j].append(mylist[i])