K M*_*gan 0 python boolean sum list
我知道python可以将'True'视为'1'(与许多编码语言一样),因此获取列表的sum()应返回列表中的trues数.(如计算Python列表中的True Booleans数量所示)
我是Python的新手,并且已经在Python中进行了一些ISLR应用程序练习(http://www.springer.com/us/book/9781461471370).
第2章,问题10(h)有一个非常简单的问题,要求变量('rm')的观察数大于7.我希望以下代码能够工作:
test = [Boston['rm'] > 7]
sum(test)
Run Code Online (Sandbox Code Playgroud)
然而,这会返回整个列表"test",其中包含0和1,而不是其总和.有谁能解释为什么?(注意波士顿来自R中MASS包的波士顿数据集)
如果我使用元组或numpy数组而不是列表它可以正常工作; 例如:
test2 = (Boston['rm'] > 7)
sum(test2)
test3 = np.array(Boston['rm'] > 7)
sum(test3)
Run Code Online (Sandbox Code Playgroud)
此外,"test"似乎是一个合适的布尔列表,因为下面的代码使用它来子集"Boston"也可以正常工作:
test4 = Boston[Boston['rm'] > 7]
len(test4)
Run Code Online (Sandbox Code Playgroud)
虽然我已经清楚地发现了几种有效的方法,但我很困惑为什么第一种方法没有.提前致谢.
如果我使用元组或numpy数组而不是列表它可以正常工作; 例如:
Run Code Online (Sandbox Code Playgroud)test2 = (Boston['rm'] > 7) sum(test2) test3 = np.array(Boston['rm'] > 7) sum(test3)
(Boston['rm'] > 7)使用括号进行分组; 它不是一个元组.元组的等价物是(Boston['rm'] > 7,)(注意逗号),它以与列表相同的方式中断.使用np.array阵列上不改变它-这就像之间的差异list(5)和[5].
至于为什么它不起作用:Boston['rm'] > 7是一个数组,所以你想直接得到它的总和.将其包装在另一个列表中意味着您将获取数组列表的总和而不是布尔值列表.