Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 简洁地确定一对在较长的列表中存在的次数 我正在编写一大块代码,我想缩短长度或表达式。 假设我们有一个列表,类似于: farm = ["cow","cow","cow", "hen","hen","hen", "fox","fox","fox", "hen","hen", "hen"] lookup = ["cow","hen"]_Python_List_If Statement - Fatal编程技术网

Python 简洁地确定一对在较长的列表中存在的次数 我正在编写一大块代码,我想缩短长度或表达式。 假设我们有一个列表,类似于: farm = ["cow","cow","cow", "hen","hen","hen", "fox","fox","fox", "hen","hen", "hen"] lookup = ["cow","hen"]

Python 简洁地确定一对在较长的列表中存在的次数 我正在编写一大块代码,我想缩短长度或表达式。 假设我们有一个列表,类似于: farm = ["cow","cow","cow", "hen","hen","hen", "fox","fox","fox", "hen","hen", "hen"] lookup = ["cow","hen"],python,list,if-statement,Python,List,If Statement,我应该检查farm列表中是否有lookfor的三个连续元素 一种方法是: for i in range (0,len(farm) - 2): if ((farm[i] == farm[i+1] == farm[i+2] == lookup[0]) or (farm[i] == farm[i+1] == farm[i+2] == lookup[1])): # do something 现在,如果lookup中的元素数量很小,则可以用上面的方法编写。但是,如果太长,代码看起来

我应该检查
farm
列表中是否有
lookfor
的三个连续元素

一种方法是:

for i in range (0,len(farm) - 2):
  if ((farm[i] == farm[i+1] == farm[i+2] == lookup[0])
     or (farm[i] == farm[i+1] == farm[i+2] == lookup[1])):
    # do something
现在,如果
lookup
中的元素数量很小,则可以用上面的方法编写。但是,如果太长,代码看起来很麻烦,很难维护。是否有一种更简洁的方式来编写代码,也许是以列表理解格式编写,这样我就不必手动编写来查找
查找
的所有元素了?

未经测试,但类似于“这样”;-)应该有用
any()
是处理任意数量的
s的自然方式,而
all()
是处理任意数量的
s的自然方式

if any(farm[i] == farm[i+1] == farm[i+2] == target for i in range(len(farm) - 2)
       for target in lookup):
    # do something
如果您需要
i
此变量将为您提供匹配的
i
值,与原始代码非常相似:

for i in range (0,len(farm) - 2):
   if any(farm[i] == farm[i+1] == farm[i+2] == target for target in lookup):
       print(i)    
未经测试,但“像这样”;-)应该有用
any()
是处理任意数量的
s的自然方式,而
all()
是处理任意数量的
s的自然方式

if any(farm[i] == farm[i+1] == farm[i+2] == target for i in range(len(farm) - 2)
       for target in lookup):
    # do something
如果您需要
i
此变量将为您提供匹配的
i
值,与原始代码非常相似:

for i in range (0,len(farm) - 2):
   if any(farm[i] == farm[i+1] == farm[i+2] == target for target in lookup):
       print(i)    
试试这个

gr = [(k,len(list(ns))) for k,ns in itertools.groupby(farm)]
for k in lookup:
    if (k,3) in gr:
        print k
将检查精确的连续三个键。对于至少三个,您可以按大小筛选组,并检查每个条目是否都在查找中。

试试这个

gr = [(k,len(list(ns))) for k,ns in itertools.groupby(farm)]
for k in lookup:
    if (k,3) in gr:
        print k

将检查精确的连续三个键。对于至少三个,您可以按大小筛选组,并检查每个条目是否在查找中。

不同意关闭。OP已经解决了“切片列表的存在”问题——他们正在寻求一种python方法来检查任意数量的目标子列表是否存在。链接的问题甚至没有提到这一点。@TimPeters-我以为他们有兴趣减少
农场[I]==farm[I+1]…
。额外的原始版本应该也解决了另一个难题。@motiur,您正在寻找
any()
内置函数,就像
如果有(@TigerhawkT3,否,他们明确表示“现在如果
lookfor
中的元素数量很小,它可以用上述方式编写。但是,如果太长,代码看起来很麻烦…”。他们的问题完全是当
lookfor
太长时该怎么办。@TimPeters-是的,我错了;对此表示抱歉。现在应该全部解决。不同意结束。OP已经解决了“切片列表的存在”问题问题-他们要求一种python方法来检查任意数量的目标子列表中是否存在任何一个。链接的问题甚至没有提到这一点。@TimPeters-我以为他们有兴趣减少
farm[I]==farm[I+1]…
。额外的原始版本也应该解决另一个难题。@motiur,您正在寻找
any()
内置函数,比如
如果有(@TigerhawkT3,不,他们明确地说“现在,如果
lookfor
中的元素数量很小,它可以用上面的方式编写。但是,如果太长,代码看起来很麻烦…”。他们的问题完全是当
lookfor
“太长”时该怎么办。@TimPeters-是的,我不正确;很抱歉。现在应该全部修复。如果我
打印(farm[I],农场[i+1],农场[i+2])
我得到了
fox,fox,fox
-我只期望
cow
hen
。对不起,我猜不出你的意思。在我给出的代码中,
I
是理解的局部变量,对理解之外的任何同名变量都没有影响。如果你需要
I
的值,那么这是原始问题中未提及的新要求。有关捕获
i
值的明显方法,请参见编辑。如果i
print(场[i],场[i+1],场[i+2])
我得到了
fox,fox,fox
-我只期望
cow
hen
。对不起,我猜不出你的意思。在我给出的代码中,
I
是理解的局部变量,对理解之外的任何同名变量都没有影响。如果你需要
I
的值,那么这是原始问题中未提及的新要求。有关捕获
i
值的明显方法,请参见编辑。