如何解决Python-如何检查列表中的下几个元素是否符合某些语句
我有一个很大的值列表,我想搜索模式:如果listItem ==一些值,并且列表中的下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
内置类型,并且我还删除了0
中的range
不需要的功能。
all
功能检查可迭代变量作为参数传递的每个元素的取值为True
,而我们的可迭代变量是一系列布尔值,接下来的10个元素将与someValue
进行比较。 / p>
另一个选择是使用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建议了另一种方法来检查该条件,该条件更易于阅读(有关详细信息,请参见his answer并删除一个类似的符号),该方法与生成器语法结合在一起:
for i in (i for i,value in enumerate(lst) if value == someValue not in lst[i+1:i+11]):
doSomething()
,
使用成员资格测试和chaining:
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()
,
尝试一下:
WorldAnchorManager
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。