定义一个函数计算列表中小于零的元素数量。大家看一下不同的思路,应该还是很有启发的。
不使用循环的方法
def count_negatives(nums):
"""Return the number of negative numbers in the given list.
>>> count_negatives([5, -1, -2, 0, 3])
2
"""
nums.append(0)
nums.sort()
return nums.index(0)
使用循环的方法 1
def count_negatives(nums):
"""Return the number of negative numbers in the given list.
>>> count_negatives([5, -1, -2, 0, 3])
2
"""
n_negative = 0
for num in nums:
if num < 0:
n_negative = n_negative + 1
return n_negative
使用循环的方法 2
def count_negatives(nums):
return len([num for num in nums if num < 0])
使用循环的方法 3
def count_negatives(nums):
# Reminder: in the "booleans and conditionals" exercises, we learned about a quirk of
# Python where it calculates something like True + True + False + True to be equal to 3.
return sum([num < 0 for num in nums])
这个算法很有趣,利用True==1的特性进行计算。
以上三个方法哪一个是最好的是一个很主观的判断。用更少的代码解决问题总是好的,但Python的哲学 The Zen of Python也不要忘了:
Readability counts. 需要考虑易读性。
Explicit is better than implicit. 一目了然的要比晦涩的更好。
内容参考了Kaggle上的内容(https://www.kaggle.com/colinmorris/loops-and-list-comprehensions)