【发布时间】:2020-02-19 19:48:14
【问题描述】:
我有一个单词列表,使用 python3 我计算每个单词组合之间的字母差异(使用clever diff_summing algorithm from this site):
import itertools
def diff_letters(a,b):
return sum ( a[i] != b[i] for i in range(len(a)) )
w = ['AAHS','AALS','DAHS','XYZA']
for x,y in itertools.combinations(w,2):
if diff_letters(x,y) == 1:
print(x,y)
打印出来:
AAHS AALS
AAHS DAHS
我的问题:我如何计算和字符串“DAHS”和“AALS”只有一个合作伙伴,而“AAHS”有两个合作伙伴?我将过滤每个target_string 有正好一个 near_matching_word 的方向组合,所以我的最终数据(作为 JSON)看起来像这样:
[
{
"target_word": "DAHS",
"near_matching_word": "AAHS"
},
{
"target_word": "AALS",
"near_matching_word": "AAHS"
}
]
(注意 AAHS 没有显示为 target_word)
我有一个使用functools.reduce的版本
import itertools
import functools
import operator
def diff_letters(a,b):
return sum ( a[i] != b[i] for i in range(len(a)) )
w = ['AAHS','AALS','DAHS','XYZA']
pairs = []
for x,y in itertools.combinations(w,2):
if diff_letters(x,y) == 1:
#print(x,y)
pairs.append((x,y))
full_list = functools.reduce(operator.add, pairs)
for x in full_list:
if full_list.count(x) == 1:
print (x)
打印出来的
AALS
DAHS
但是我必须回到我的大名单pairs 才能找到near_matching_word。当然,在我的最终版本中,pairs 列表会更大,target_word 可以是元组 (x,y) 中的第一项或第二项。
【问题讨论】:
标签: python arrays python-3.x algorithm string-matching