【问题标题】:Compare Sequences Python比较序列 Python
【发布时间】:2016-04-04 09:49:54
【问题描述】:

python 中有没有办法比较列表中的 2 个序列,即使它们没有被规范化(我认为这是正确的词)。例如:

a = [1,1,2,3,3,1,5]
b = [2,3,3,1,5,1,1]
c = [1,1,1,2,3,3,5]

a == b 应该返回 True,因为它们包含来自不同起点的相同序列。

c == a 应该返回 False,因为尽管它们包含相同的元素,但它们不包含相同的序列

我唯一能想到的是相当不雅。我会比较 2 个列表,如果它们不相等,则将列表的最后一个元素移到前面并再次比较。重复此操作,直到我移动了整个列表一次。但是,我将使用一些非常大的列表,所以这将非常低效

【问题讨论】:

    标签: python list compare sequences


    【解决方案1】:

    这可能比移动元素更有效:

    >>> a = [1, 1, 2, 3, 3, 1, 5]
    >>> b = [2, 3, 3, 1, 5, 1, 1]
    >>> c = [1, 1, 1, 2, 3, 3, 5]
    >>> astr, bstr, cstr = ["".join(map(str, x)) for x in (a, b, c)]
    >>> astr in bstr*2
    True
    >>> cstr in astr*2
    False
    

    它的作用基本上是join 字符串列表并检查第一个字符串是否包含在另一个“加倍”中。
    使用字符串可能是最快的,并且应该适用于像 OP 这样的简单情况。作为一种更通用的方法,您可以将相同的想法应用于列出切片,例如:

    >>> any(idx for idx in range(len(a)) if (b*2)[idx:idx+len(a)] == a)
    True
    

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      相关资源
      最近更新 更多