gpt4 book ai didi

python - 比较 2 个 Python 列表的顺序

转载 作者:太空狗 更新时间:2023-10-30 01:53:43 24 4
gpt4 key购买 nike

我正在寻找一些帮助来比较 2 个 Python 列表的顺序,list1list2,以检测 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 进行比较。

例如,如果 list2a,c,d,e,g,i 应该返回 true(因为字符串是按顺序排列的)

虽然,如果 list2a,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 表示有序。

忽略 list1 中不在 list2 中的元素

让我们考虑一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com