我正在寻找一些帮助来比较 list1 list2 的 2 个 Python 列表的顺序,以检测 list2 何时出现故障。

  • list1 是静态的,包含字符串 a,b,c,d,e,f,g,h,i,j 。这是“正确”的顺序。
  • list2 包含相同的字符串,但字符串的顺序和数量可能会改变。 (例如 a,b,f,d,e,g,c,h,i,ja,b,c,d,e )

  • 我正在寻找一种有效的方法来通过将 list2 list1 进行比较来检测何时是我们的订单。

    例如,如果 list2 a,c,d,e,g,i 应该返回 true(因为字符串是有序的)

    同时,如果 list2 a,d,b,c,e 应该返回 false (因为字符串 d 出现乱序)

    最佳答案

    首先,让我们定义 list1 :

    >>> list1='a,b,c,d,e,f,g,h,i,j'.split(',')
    >>> list1
    ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
    

    虽然您的 list1 恰好是按字母顺序排列的,但我们不会假设。无论如何,此代码都有效。

    现在,让我们创建一个乱序的 list2:
    >>> list2 = 'a,b,f,d,e,g,c,h,i,j'.split(',')
    >>> list2
    ['a', 'b', 'f', 'd', 'e', 'g', 'c', 'h', 'i', 'j']
    

    下面是如何测试 list2 是否乱序:
    >>> list2 == sorted(list2, key=lambda c: list1.index(c))
    False
    
    False 表示乱序。

    这是一个有序的例子:
    >>> list2 = 'a,b,d,e'.split(',')
    >>> list2 == sorted(list2, key=lambda c: list1.index(c))
    True
    
    True 表示有序。

    忽略不在 list2 中的 list1 元素

    让我们考虑一个 list2 ,它有一个不在 list1 中的元素:
    >>> list2 = 'a,b,d,d,e,z'.split(',')
    

    要忽略不需要的元素,让我们创建 list2b :
    >>> list2b = [c for c in list2 if c in list1]
    

    然后我们可以像以前一样测试:
    >>> list2b == sorted(list2b, key=lambda c: list1.index(c))
    True
    

    不使用 sorted 的替代方法
    >>> list2b = ['a', 'b', 'd', 'd', 'e']
    >>> indices = [list1.index(c) for c in list2b]
    >>> all(c <= indices[i+1] for i, c in enumerate(indices[:-1]))
    True
    

    关于python - 比较 2 个 Python 列表的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37061827/

    10-13 05:07