Python 列表间隔比较

Python 列表间隔比较,python,syntax,Python,Syntax,我正试图使一个非常长的程序变得更简洁,因为我需要对它进行修改以运行多种报告。基本上,它从excel中的报告加载一个列表,然后检查这些值是否高于或低于控制限制。我尝试使用区间比较来查看列表中是否有任何值不在控制限之间,但这不起作用。取而代之的是,我不得不采用一种稍微长一点的有效方法。有人能给我解释一下为什么下面显示的第二种方法不起作用吗?没有错误,但它不会像第一个一样找到失败的测试 ############### This is the same between the two methods #

我正试图使一个非常长的程序变得更简洁,因为我需要对它进行修改以运行多种报告。基本上,它从excel中的报告加载一个列表,然后检查这些值是否高于或低于控制限制。我尝试使用区间比较来查看列表中是否有任何值不在控制限之间,但这不起作用。取而代之的是,我不得不采用一种稍微长一点的有效方法。有人能给我解释一下为什么下面显示的第二种方法不起作用吗?没有错误,但它不会像第一个一样找到失败的测试

############### 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为35x>35): GT=‘凝胶时间’
您正在寻找的可能是:

any(x not in range(10,36) for x in GtimeList)

这是一个逻辑问题,而不是编程问题。两个代码段对每个值都有两个条件,总共有2n个条件。您的第一个代码片段只需要2n个条件中的一个条件为真。你的第二个要求其中两个为真,并且需要两个为相同的值。您应该将第二个代码中的
any
替换为
notall

基本上,您的第一个代码是“∃ x:10>x和∃ x:35x和x<35)。你正在把“或”变成“和”。使用逻辑规则,我们可以执行以下操作:

∃ x:10>x或∃ x:35 不是(∀ x:10>x)或否(∀ x:35 不是((∀ x:10>x)和(∀ x:35 不是((∀ x:10>x和35 您还可以执行
min(GtimeList)<10或max(GtimeList)>35


作为一个关于你的
isinstance(x,str)
检查的旁注,通常最好检查每件事是否都是你想要的,而不是你不想要的。如果
x
不是字符串或数字,比如列表,该怎么办?

您的第一个条件检查xBecause
10>x>35
是否意味着
10>x
x>35
这显然是错误的10>x>35它与10>x和x>35相同。理解35>10,x不可能是真的,因为x不能小于10,也不能大于35,这很有道理!所以这不是一个真正的“或”语句,而是一个“和”语句。非常感谢。这取决于值是否为整数。