【问题标题】:Check if an item is always followed by another in a list - Python检查列表中的一个项目是否总是紧随其后 - Python
【发布时间】:2018-05-08 15:49:52
【问题描述】:

我想检查一个项目是否总是跟在列表中的另一个项目之后。我想出了这个非常老套的例子......假设我想检查以下列表中的“a”是否总是跟在“b”后面:

list = ['x','y','z','a','b','2','3','5','2','1','5','fds','f','s','a','b']

然后,理想情况下,如果每次我们看到一个“a”,它后面直接跟一个“b”,函数就会返回 TRUE。谁能帮我这个?也许我在这里遗漏了一些非常简单的东西。

【问题讨论】:

  • list 不是最好的名称,因为它与 list 内置类型冲突。

标签: python regex list


【解决方案1】:
all(a != 'a' or b == 'b' for a, b in zip(list[:-1], list[1:]))

【讨论】:

  • 哇,速度快得惊人。非常感谢!我现在可以回去工作了,哈哈:)
  • @AshishAcharya 那么你需要使用not any(...)
【解决方案2】:

您可以使用 allzip 来获得 O(n) 解决方案。

itertools.islice 用于避免制作新列表的代价。你也可以像下面这样封装一个函数。

from itertools import islice

def fun(lst, val1, val2):
    return all(j==val2 for i, j in zip(lst, islice(lst, 1, None)) if i==val1)

lst = ['x','y','z','a','b','2','3','5','2','1','5','fds','f','s','a','b']

res = fun(lst, 'a', 'b')

print(res)  # True

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 2017-02-10
    • 2017-12-21
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 2021-06-25
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多