Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—如何检查列表中的下几个元素是否符合某些语句_Python_Loops_If Statement - Fatal编程技术网

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

Python—如何检查列表中的下几个元素是否符合某些语句,python,loops,if-statement,Python,Loops,If Statement,我有一个巨大的值列表,我想搜索模式:若listItem==某个值,并且列表中的下10个项满足某个语句,那个么做些什么。如何做到这一点以避免长时间的多重if条件代码 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: doSomethin

我有一个巨大的值列表,我想搜索模式:若listItem==某个值,并且列表中的下10个项满足某个语句,那个么做些什么。如何做到这一点以避免长时间的多重if条件代码

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 (0, len(list)):
    if list[i] == someValue and all(x != someValue for x in list[i+1:i+10]): 
        doSomething()

您可以这样做:

范围内的i(len(lst)):
如果lst[i]==someValue和all(x!=lst[i+1:i+11]中x的someValue):
doSomething()
我将变量名从
list
更改为
lst
,因为您不能覆盖
list
内置类型,并且我还删除了
范围中的
0
,因为它不需要

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

另一个选项是使用
enumerate(…)
,以避免再次从列表中获取值,而不是从
range(len(…)

对于i,枚举中的值(lst):
如果value==someValue和all(x!=lst[i+1:i+11]中x的someValue):
doSomething()
我们可以把它做成发电机:

对于i-in(i代表i,枚举(lst)中的值,如果值==someValue和all(x!=someValue代表lst中的x[i+1:i+11]):
doSomething()
@HeapOverflow提出了另一种方法来检查与生成器语法相结合的更具可读性的条件(有关更多详细信息,请参阅并删除类似内容),即:

for i in(i for i,value in enumerate(lst)如果value==someValue不在lst[i+1:i+11]):
doSomething()

您的意思是搜索任意值吗

target=[someValue1,someValue2,…someValue11]
对于范围内的i(透镜(lst)-10):
如果lst[i:i+11]==目标:
doSomething()
使用成员资格测试和:

对于i,枚举中的值(lst):
如果value==someValue不在lst[i+1:i+11]中:
doSomething()

应该是
all(x!=someValue for x in ist[i+1:i+10])
尽管有一个
庞大的列表
你应该首先限制你的迭代:
范围(len(mylist)-10)
所以
someValue
对于所有11个条件都是一样的?@quamrana这是不需要的,
a=[1,2,3];[3:13]
不会产生错误,它只会给出尽可能多的元素。在本例中为0。@HeapOverflow是否要构建一组下十个数字,检查是否只有一个元素,然后根据值检查该元素?(评论现在没有意义了,因为我指的评论被删除了)哦,我明白了。好主意。@HeapOverflow生成器版本和您的支票在我看来确实是最好的,您介意我也加上适当的信用吗?如果您喜欢,请继续:-)顺便说一句,我也在考虑写一个更有效的解决方案,只找到匹配的索引,而不是检查接下来的十个值是否不同,只需检查下一个匹配索引是否足够远。我真的不想走那么远,因为我仍然不相信这个问题,OP忽略了我的澄清问题评论。你错过了负面比较,不需要限制范围。什么是
负面比较?
?他对第一个元素只有
=
,但他有
=用于以下10项。好的,错过了!这就是列表中接下来的10项符合某种陈述的意思吗?这就是我所理解的。