我正在做关于数据请求.io. 航空公司的目标是创建一个独特的航班延误表。在
#setting up empty lists
delays_by_carrier = {}
unique_carriers = []
#formula that returns column number based on column name
carrier_column = column_number_from_name("carrier")
for row in flight_delays:
if row[carrier_column] in unique_carriers == False:
unique_carriers.append(row[carrier_column])
print (unique_carriers)
print(unique_carriers)命令返回一个空列表,而我期望得到一个唯一载体的列表。有人能解释一下吗?在
仅供参考-我设法用另一种方法解决了这个问题。我还是有兴趣看看我该怎么解决这个问题!在
谢谢你的回答。为了继续,以下解决方案本应有效:
^{pr2}$
关于为什么我的代码不起作用的解释我有点糊涂了。但我现在明白了我创建的测试的复杂性,确保我会首先找到一个优雅的解决方案。在
谨致问候
代码中的问题是测试。您想检查承运人是否还未进入
unique_carriers
,但您的测试有点奇怪。在任何情况下,都应该避免在测试中比较布尔值,因为测试已经是布尔值的比较。简单的表达式是:你想写的是:
^{pr2}$这本可以奏效的(但不雅观)。你也可以写
not (row[carrier_column] in unique_carriers)
。在你的问题中有趣的是实际发生了什么。这不是关于运算符优先级的问题:您的代码不会被解释为
row[carrier_column] in (unique_carriers == False)
,这将引发一个TypeError
异常,声明您不能将in
运算符与布尔值一起使用。在不,在Python中,您可以chain comparisons,例如}和{}都是这种意义上的比较。因此你的陈述被解释为
x < y < z
,而{(row[carrier_column] in unique_carriers) and (unique_carriers == False)
。在你可以用字节码来确认。这里我做一个简单的函数,看看Python将如何处理它:
然后,让我们看看字节码!在
在
10
处,您可以看到复制堆栈顶部的DUP_TOP
,该堆栈当时就是列表。然后ROT_THREE
旋转堆栈,这样您就可以得到:现在使用}和{}来比较剩下的内容(
in
(12
)进行第一次比较,如果True
继续{unique_carriers
,因为其他2个在比较中被弹出)与False
。就这样,你的测试是:相关问题 更多 >
编程相关推荐