几乎相同的两个列表的匹配元素

麦克斯林

假设我有两个字符串列表。我想通过获取最类似于第一个列表的相应元素的元素来重新排序第二个列表。

我已经这样做了:

import difflib

list1 = ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'iiii', 'jjjj']
list2 = ['eeez', 'fffz', 'dddz', 'cccz', 'iiiz', 'jjjz', 'aaaz', 'gggz', 'hhhz', 'bbbz']

len = len(list1)
i = 0
while i < len:
    j = 0
    while j < len:
        if difflib.SequenceMatcher(None, list1[i], list2[j]).ratio() > 0.5:
            eltMove = list2.pop(j)
            list2.insert(i, eltMove)
            break
        j += 1
    i += 1

print(list2)

输出 :

['aaaz', 'bbbz', 'cccz', 'dddz', 'eeez', 'fffz', 'gggz', 'hhhz', 'iiiz', 'jjjz']

但是,在某些情况下,如果list2中的某个元素与list1中的某个元素有些匹配,这是行不通的,这会中断循环并跳过下一个元素,即使它们可以更好地匹配。

阿西什·M。
while i  < len:
    j = 0
    new_l = []
    while j < len:
        new_l.append(difflib.SequenceMatcher(None, list1[i], list2[j]).ratio())
        j += 1
    ind = new_l.index(max(new_l))
    eltMove = list2.pop(ind)
    list2.insert(i, eltMove)
    i += 1

它存储比率,然后计算最大值,找出最大值的索引,然后弹出/插入。

希望这就是你所需要的

for i, a in enumerate(list1):
    new_l = [difflib.SequenceMatcher(None, a, b).ratio() for b in list2]
    ind = new_l.index(max(new_l))
    eltMove = list2.pop(ind)
    list2.insert(i, eltMove)

缩短代码

考虑到@Jose Raul Barreras的回复,对上述内容的适当修改如下:

tmp = []
for i, a in enumerate(list1):
    new_l = [difflib.SequenceMatcher(None, a, b).ratio() for b in list2]
    ind = new_l.index(max(new_l))
    eltMove = list2.pop(ind)
    tmp.append(eltMove)

>>> tmp
['aaaz', 'bbbz', 'cccz', 'dddz', 'eeez', 'fffz', 'gggz', 'hhhz', 'iiiz', 'jjjz', 
 'aaaz', 'bbbz', 'cccz', 'dddz', 'eeez', 'fffz', 'gggz', 'hhhz', 'iiiz', 'jjjz']

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

匹配列表的前两个元素

来自分类Dev

R匹配两个列表并找到匹配的元素

来自分类Dev

元素相同的两个列表中的公共元素

来自分类Dev

匹配两个numpy数组以查找相同的元素

来自分类Dev

如果两个元素相同,如何替换列表中的两个元素(Python)

来自分类Dev

检查两个列表是否具有相同的元素

来自分类Dev

Scala:在两个列表的相同位置组合元素

来自分类Dev

如何从Haskell的两个列表中提取相同的元素?

来自分类Dev

如何返回两个列表中相同元素的计数?

来自分类Dev

删除包含两个相同元素的Python列表项

来自分类Dev

比较两个列表并获取相同元素的索引

来自分类Dev

计算两个列表中匹配元素的数量

来自分类Dev

优化两个列表之间的元素明智模糊匹配

来自分类Dev

查找两个列表的匹配元素的索引

来自分类Dev

在两个以上的列表中找到匹配的元素

来自分类Dev

Perl-两个列表匹配元素

来自分类Dev

如何匹配Scala中两个列表中的元素?

来自分类Dev

c#重构两个几乎相同的方法

来自分类Dev

CSS位置几乎相同的两个div不对齐

来自分类Dev

两个几乎完全相同的程序,但输出不同

来自分类Dev

两个几乎相同的向量之间的角度

来自分类Dev

两个几乎完全相同的程序,但输出不同

来自分类Dev

计算两个列表的笛卡尔积,两个元素的索引相同

来自分类Dev

两个元素元组的列表转换为具有相同元素的元组列表

来自分类Dev

Python:如果前两个元素相同,则在嵌套列表中添加元素

来自分类Dev

查找在Python中具有完全相同值的两个嵌套元素的列表元素

来自分类Dev

如何合并两个列表?保留相同的列表元素以进行集合操作

来自分类Dev

将两个元素列表合并为一个元素相同但每个元素有两个变量的列表

来自分类Dev

如何使两个元素的高度相同?

Related 相关文章

  1. 1

    匹配列表的前两个元素

  2. 2

    R匹配两个列表并找到匹配的元素

  3. 3

    元素相同的两个列表中的公共元素

  4. 4

    匹配两个numpy数组以查找相同的元素

  5. 5

    如果两个元素相同,如何替换列表中的两个元素(Python)

  6. 6

    检查两个列表是否具有相同的元素

  7. 7

    Scala:在两个列表的相同位置组合元素

  8. 8

    如何从Haskell的两个列表中提取相同的元素?

  9. 9

    如何返回两个列表中相同元素的计数?

  10. 10

    删除包含两个相同元素的Python列表项

  11. 11

    比较两个列表并获取相同元素的索引

  12. 12

    计算两个列表中匹配元素的数量

  13. 13

    优化两个列表之间的元素明智模糊匹配

  14. 14

    查找两个列表的匹配元素的索引

  15. 15

    在两个以上的列表中找到匹配的元素

  16. 16

    Perl-两个列表匹配元素

  17. 17

    如何匹配Scala中两个列表中的元素?

  18. 18

    c#重构两个几乎相同的方法

  19. 19

    CSS位置几乎相同的两个div不对齐

  20. 20

    两个几乎完全相同的程序,但输出不同

  21. 21

    两个几乎相同的向量之间的角度

  22. 22

    两个几乎完全相同的程序,但输出不同

  23. 23

    计算两个列表的笛卡尔积,两个元素的索引相同

  24. 24

    两个元素元组的列表转换为具有相同元素的元组列表

  25. 25

    Python:如果前两个元素相同,则在嵌套列表中添加元素

  26. 26

    查找在Python中具有完全相同值的两个嵌套元素的列表元素

  27. 27

    如何合并两个列表?保留相同的列表元素以进行集合操作

  28. 28

    将两个元素列表合并为一个元素相同但每个元素有两个变量的列表

  29. 29

    如何使两个元素的高度相同?

热门标签

归档