Python 列表间隔比较
我正试图使一个非常长的程序变得更简洁,因为我需要对它进行修改以运行多种报告。基本上,它从excel中的报告加载一个列表,然后检查这些值是否高于或低于控制限制。我尝试使用区间比较来查看列表中是否有任何值不在控制限之间,但这不起作用。取而代之的是,我不得不采用一种稍微长一点的有效方法。有人能给我解释一下为什么下面显示的第二种方法不起作用吗?没有错误,但它不会像第一个一样找到失败的测试Python 列表间隔比较,python,syntax,Python,Syntax,我正试图使一个非常长的程序变得更简洁,因为我需要对它进行修改以运行多种报告。基本上,它从excel中的报告加载一个列表,然后检查这些值是否高于或低于控制限制。我尝试使用区间比较来查看列表中是否有任何值不在控制限之间,但这不起作用。取而代之的是,我不得不采用一种稍微长一点的有效方法。有人能给我解释一下为什么下面显示的第二种方法不起作用吗?没有错误,但它不会像第一个一样找到失败的测试 ############### This is the same between the two methods #
############### This is the same between the two methods #############
#Loading my list with the variables to be checked
GtimeList = [37, 37, 37, 32, 32, 32,
Gtime3b, GtimeAveb]
GT = 0
#Make sure these are numbers
if any(isinstance(x, str) for x in GtimeList):
continue
######## Method one works fine, but I want it more concise ############
#Check to see if any of the variables are not between 10 to 35
elif any(10 > x for x in GtimeList) or any(35 < x for x in GtimeList):
GT = 'Gel Time'
######## Method two, this is how I want it to work ########
#Check to see if any of the variables are not between 10 to 35
elif any(10 > x > 35 for x in GtimeList):
GT = 'Gel Time'
这两种方法是相同的#############
#正在加载包含要检查的变量的列表
GtimeList=[37,37,37,32,32,32,
Gtime3b,GtimeAveb]
GT=0
#确保这些是数字
如果有(GtimeList中x的isinstance(x,str)):
持续
########方法一很好,但我希望它更简洁############
#检查是否有任何变量不在10到35之间
如果存在任何(GtimeList中x为10>x)或任何(GtimeList中x为35您正在寻找的可能是:
any(x not in range(10,36) for x in GtimeList)
这是一个逻辑问题,而不是编程问题。两个代码段对每个值都有两个条件,总共有2n个条件。您的第一个代码片段只需要2n个条件中的一个条件为真。你的第二个要求其中两个为真,并且需要两个为相同的值。您应该将第二个代码中的
any
替换为notall
基本上,您的第一个代码是“∃ x:10>x和∃ x:35min(GtimeList)<10或max(GtimeList)>35
作为一个关于你的
isinstance(x,str)
检查的旁注,通常最好检查每件事是否都是你想要的,而不是你不想要的。如果x
不是字符串或数字,比如列表,该怎么办?您的第一个条件检查xBecause10>x>35
是否意味着10>x
和x>35
这显然是错误的10>x>35它与10>x和x>35相同。理解35>10,x不可能是真的,因为x不能小于10,也不能大于35,这很有道理!所以这不是一个真正的“或”语句,而是一个“和”语句。非常感谢。这取决于值是否为整数。