两组类似的python代码的行为似乎有所不同

两组类似的python代码的行为似乎有所不同,python,Python,试图找出为什么我在这里得到两个不同的结果,一个是错误的。以下是运行的代码: hta = 2.13 visitor_team_ratings = [21.53] home_team_ratings = [None] difference = [] for a, b in zip(visitor_team_ratings, home_team_ratings): if a and b: difference.append(a - (b + float(hta)))

试图找出为什么我在这里得到两个不同的结果,一个是错误的。以下是运行的代码:

hta = 2.13
visitor_team_ratings = [21.53]
home_team_ratings = [None]
difference = []

for a, b in zip(visitor_team_ratings, home_team_ratings):
    if a and b:
        difference.append(a - (b + float(hta)))
    else:
        difference.append('NO RATING')
print(difference)
这没有打印出评级,但我很难理解它为什么会这样做。None与空列表不同,那么为什么python会下降到else语句中呢

下面是引发错误的类似代码。与上述工作代码相同的变量/列表:

if visitor_team_ratings and home_team_ratings:
    difference.append((visitor_team_ratings[0] - (home_team_ratings[0] + float(hta))))
else:
    difference.append('NO RATING')
print(difference)
错误为:TypeError:不支持+:“非类型”和“浮点”的操作数类型


我不确定我是否理解为什么一个有效,一个无效。而那个确实有效的,我甚至不知道我为什么会这样。我在程序中使用第一个代码块已经有一段时间了…

在第一个示例中,如果a和b的计算结果为False,因为boolNone为False。在第二个示例中,列表[None]的计算结果为True,因为在第一个示例中,如果a和b的计算结果为False,则列表[None]不是空的,因为boolNone为False。在第二个示例中,列表[None]的计算结果为True,因为它不是空的

问题主要归结为:

home_team_ratings = [None]
在第一个版本中,当您编写

if a and b
b是零,因为它来自主场和球队的评分。因此,if条件为false

在第二个版本中

if visitor_team_ratings and home_team_ratings:
此条件为true,因为两个列表都不是空的。
但是home_team_ratings[0]+floathta抛出了一个异常,因为您正试图将None添加到浮动中。

问题主要归结于以下几点:

home_team_ratings = [None]
在第一个版本中,当您编写

if a and b
b是零,因为它来自主场和球队的评分。因此,if条件为false

在第二个版本中

if visitor_team_ratings and home_team_ratings:
此条件为true,因为两个列表都不是空的。 但是主队评分[0]+floathta会抛出一个异常,因为您正试图在浮动中不添加任何内容。

在“如果访客队评分和主队评分:”中,您可以查看列表

而如果您使用:如果访客团队评分[0]和家庭团队评分[0]:。然后查看列表中的元素。对应于你第一个街区的a和b

编辑我应该详细说明:

home_team_ratings = [None]
这就是你问题的原因。如果您查看元素,它是无的,因此条件将不为真。但是,如果您查看列表,那么您的if将为True,因为两个列表都不是空的。但是就在主队评分[0]之后:将给出一个错误,因为它没有错误。

如果访客队评分和主队评分:̀您查看列表

而如果您使用:如果访客团队评分[0]和家庭团队评分[0]:。然后查看列表中的元素。对应于你第一个街区的a和b

编辑我应该详细说明:

home_team_ratings = [None]

这就是你问题的原因。如果您查看元素,它是无的,因此条件将不为真。但是,如果您查看列表,那么您的if将为True,因为两个列表都不是空的。但是在home\u team\u ratings[0]之后:将给出一个错误,因为它是无的。

在第一个块中,您正在循环列表的元素。在循环中,您正在评估气象元素A和b是否都是真的。显然,没有一个是不正确的,这就是为什么它会转移到其他部分


在第二部分中,您将评估两个列表是否正确。列表不是空的,所以如果执行部件

在第一个块中,您正在列表的元素之间循环。在循环中,您正在评估气象元素A和b是否都是真的。显然,没有一个是不正确的,这就是为什么它会转移到其他部分


在第二部分中,您将评估两个列表是否正确。列表不是空的,所以如果执行部件

如果visitor\u team\u ratings和home\u team\u ratings:应该是visitor\u team\u ratings[0]和home\u team\u ratings[0]:否则你不看元素,而是看列表本身,我想现在我发布了这个,我有点明白问题是什么了。在第一个代码块中,我正在测试列表a/b中的元素是否真实。在第二个代码块中,我正在测试列表,看看列表本身是否真实……我正要将其作为一个答案来写。请发布一个@Nuageux错误是说您不能将浮点添加到None。如果visitor_team_ratings和home_team_ratings:应该是visitor_team_ratings[0]和home_team_ratings[0]:否则您不会查看元素,而是查看列表本身我想现在我已经发布了这个,我有点明白问题了。在第一个代码块中,我正在测试列表a/b中的元素是否真实。在第二个代码块中,我正在测试列表,看看列表本身是否真实……我正要将其作为一个答案来写。请发布一个@Nuageux错误是说不能将浮点添加到无。我一发布到SO,灯就“点击”。这真是太神奇了,只需把它打印出来让其他人查看,就可以帮助他们真正看到问题所在。我会尽快给你答案,看看你是如何在评论中排名第一的。谢谢@Biggen。当你
你太关注你的代码了,有时你看不到明显的东西。通常我会尽量用最小的例子来重现我的问题,就像你所做的那样,这在大多数情况下都非常有用。这真是太神奇了,只需把它打印出来让其他人查看,就可以帮助他们真正看到问题所在。我会尽快给你答案,看看你是如何在评论中排名第一的。谢谢@Biggen。当你过于关注你的代码时,你有时看不到显而易见的东西。通常我会尽量用最小的例子来重现我的问题,就像你所做的那样,这在大多数情况下是非常有用的。