【发布时间】:2018-06-09 11:01:26
【问题描述】:
我知道 python 可以将“真”视为“1”(许多编码语言也是如此),因此采用列表的 sum() 应该返回列表中的真数。 (如Counting the number of True Booleans in a Python List 所示)
我是 Python 新手,并且一直在使用 Python (http://www.springer.com/us/book/9781461471370) 进行一些 ISLR 应用程序练习。
第 2 章,问题 10 (h) 有一个非常简单的问题,询问大于 7 的变量 ('rm') 的观察次数。我希望以下代码能够正常工作:
test = [Boston['rm'] > 7]
sum(test)
但是,这会返回带有 0 和 1 的整个列表“test”,而不是其总和。谁能解释为什么? (注意波士顿来自 R 中 MASS 包中的波士顿数据集)
如果我使用元组或 numpy 数组而不是列表,它就可以正常工作;例如:
test2 = (Boston['rm'] > 7)
sum(test2)
test3 = np.array(Boston['rm'] > 7)
sum(test3)
“测试”似乎也是一个正确的布尔列表,因为以下代码使用它来子集“波士顿”也可以正常工作:
test4 = Boston[Boston['rm'] > 7]
len(test4)
虽然我已经清楚地找到了几种有效的方法,但我很困惑为什么第一种没有。提前致谢。
【问题讨论】:
-
或许你可以发一个minimal reproducible example
-
因为它计算
0+ 第一行 + 第二行 + ...。如果你想要总和,使用 `(Boston['rm'] > 7).sum()