我正在寻找一些帮助来比较 list1 和 list2 的 2 个 Python 列表的顺序,以检测 list2 何时出现故障。
a,b,c,d,e,f,g,h,i,j
。这是“正确”的顺序。 a,b,f,d,e,g,c,h,i,j
或 a,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/