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