繁体   English   中英

Python - 如何检查列表中的下几个元素是否符合某些语句

[英]Python - How to check if next few elements in list meet some statement

我有一个巨大的值列表,我想搜索模式:如果 listItem == some value 并且列表中的下 10 个项目满足某个语句,那么做一些事情。 如果条件代码那样,如何避免长倍数?

for i in range (0, len(list)):
    if list[i] == someValue and list[i+1] !=someValue and list[i+2] !=someValue and [...] and list[i+10] !=someValue: 
        doSomething()

你可以这样做:

for i in range(len(lst)):
    if lst[i] == someValue and all(x != someValue for x in lst[i+1:i+11]): 
        doSomething()

我将变量名称从list更改为lst因为您不会覆盖list内置类型,并且我还删除了range功能中的0 ,因为它不需要。

all函数检查作为参数传递的迭代中的每个元素的计算结果为True ,我们的迭代是一个布尔序列,接下来的 10 个元素根据someValue进行检查。

另一种选择是使用enumerate(...)以避免再次从列表中获取值而不是range(len(...))

for i, value in enumerate(lst):
    if value == someValue and all(x != someValue for x in lst[i+1:i+11]): 
        doSomething()

我们可以把它变成一个生成器:

for i in (i for i, value in enumerate(lst) if value == someValue and all(x != someValue for x in lst[i+1:i+11])):
    doSomething()

@HeapOverflow 建议了另一种检查该条件的方法,该方法与生成器语法相结合,该方法更具可读性(请参阅他的回答以获取更多详细信息并删除类似内容):

for i in (i for i, value in enumerate(lst) if value == someValue not in lst[i+1:i+11]):
    doSomething()

使用成员资格测试和链接

for i, value in enumerate(lst):
    if value == someValue not in lst[i+1:i+11]:
        doSomething()

您的意思是您正在搜索任意值吗?

target = [someValue1, someValue2, ... someValue11]
for i in range (len(lst) - 10):
    if lst[i:i+11] == target: 
        doSomething()

尝试这个:

for i in range (0, len(list)):
    if list[i] == someValue and all(x != someValue for x in list[i+1:i+10]): 
        doSomething()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM