计算列表中小于零的元素数量

定义一个函数计算列表中小于零的元素数量。大家看一下不同的思路,应该还是很有启发的。

不使用循环的方法

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)

你可能感兴趣的:(计算列表中小于零的元素数量)