我有一个单词列表,使用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
的形式出现)
我有一个版本使用^{
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
。当然,在我的最终版本中,list pairs
会更大,并且target_word
可以是tuple(x,y)中的第一项或第二项。你知道吗
输出:
其他答案保留所有配对,即使找到多个。既然不需要它们,那似乎浪费了记忆。这个答案每个字符串最多只能保留一对。你知道吗
输出:
您可以使用字典而不是成对列表:
输出
在
pairs
字典中,键是target_words
,值是near_matching_words
。然后使用列表理解过滤掉那些超过1near_matching_word
的。你知道吗相关问题 更多 >
编程相关推荐