2024-10-03 09:12:25 发布
网友
我有两张单子
List1 = ['hello','welcome','india','nation'] List2 = ['ind', 'nat','hellooo','welcomeeee']
我想比较元素并打印如下-
输出:
请提出一些优化的方法。在
我有一个未指定大小的列表,但它有一个列表元素与另一个列表元素匹配,因为随机,我不知道任何列表中最大/最长匹配的大小。在
您可以使用Levenshtein distance来确定最接近的匹配,因此以下是Levenshtein的一个实现:
def levenshteinDistance(s1, s2): if len(s1) > len(s2): s1, s2 = s2, s1 distances = range(len(s1) + 1) for i2, c2 in enumerate(s2): distances_ = [i2+1] for i1, c1 in enumerate(s1): if c1 == c2: distances_.append(distances[i1]) else: distances_.append(1 + min((distances[i1], distances[i1 + 1], distances_[-1]))) distances = distances_ return distances[-1] List1 = ['hello', 'welcome', 'india', 'nation'] List2 = ['ind', 'nat', 'helloooo', 'welcomeeeeee'] [min(zip(List1, [levenshteinDistance(j, i) for j in List1]), key=lambda x: x[1])[0] for i in List2] #['india', 'nation', 'hello', 'welcome']
列表理解
In [14]: [j for i in List2 for j in List1 if i in j or j in i] Out[14]: ['india', 'nation', 'hello', 'welcome']
与@AndreiDurnea's solution类似,还可以使用生成器:
def comparer(L1, L2): for i in L2: for j in L1: if (i in j) or (j in i): yield j List1 = ['hello','welcome','india','nation'] List2 = ['ind', 'nat','helloooo','welcomeeeeee'] res = list(comparer(List1, List2)) ['india', 'nation', 'hello', 'welcome']
根据@pault的评论,^{}使用列表理解可能比生成器更有效:
您可以使用Levenshtein distance来确定最接近的匹配,因此以下是Levenshtein的一个实现:
列表理解
与@AndreiDurnea's solution类似,还可以使用生成器:
根据@pault的评论,^{} 使用列表理解可能比生成器更有效:
^{pr2}$相关问题 更多 >
编程相关推荐