列表间隔比较

2024-04-19 09:17:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图使一个非常长的程序变得更简洁,因为我需要修改它来运行几种类型的报告。基本上,它从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'

Tags: theto方法ingt列表forif
2条回答

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

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

∃x:10>;x或∃x:35<;x≡
不(∀x:10>;x)或不(∀x:35<;x)≡
不(∀x:10>;x)和(∀x:35<;x))≡
不是(∀x:10>;x和35<;x))

你也可以做min(GtimeList) < 10 or max(GtimeList) > 35。你知道吗

关于你的isinstance(x, str)检查,最好的办法是检查是否所有的东西都是你想要的,而不是你不想要的。如果x不是字符串或数字,比如列表,该怎么办?你知道吗

你要找的可能是:

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

相关问题 更多 >