【问题标题】:Python - Identify a negative number in a list [closed]Python - 识别列表中的负数[关闭]
【发布时间】:2013-04-13 22:21:59
【问题描述】:

我需要帮助来编写一个程序,该程序应该接收十个数字并返回我输入的负整数的个数。

例子:

如果我输入:

1,2,-3,3,-7,5,4,-1,4,5

程序应该返回给我3

我该怎么做?

【问题讨论】:

标签: python list count identify


【解决方案1】:

分解你的问题。你能找到一种方法来检查一个数字是否为负数吗?

if number < 0:
    ...

现在,我们有很多数字,所以我们循环它们:

for number in numbers:
    if number < 0:
        ...

那么我们想要做什么呢?数一数。所以我们这样做:

count = 0
for number in numbers:
    if number < 0:
        count += 1

更理想的是,这可以使用generator expressionthe sum() built-in 轻松完成:

>>> numbers = [1, 2, -3, 3, -7, 5, 4, -1, 4, 5]
>>> sum(1 for number in numbers if number < 0)
3

【讨论】:

    【解决方案2】:
    sum(n < 0 for n in nums)
    

    这是最 Pythonic 的方式。

    【讨论】:

    • 我觉得anysum更清晰。
    • @gwg 问题询问负整数的总数。 any 会返回 TrueFalse,这不是我们想要的答案
    • numbers = [1, 2, -3, 3, -7, 5, 4, -1, 4, 5] sum(number &lt; 0 for number in numbers) 结果是 3。
    • @BoštjanMejak 就像 OP 说的那样
    • OP的提案很漂亮! Python 的成语是至高无上的美。
    【解决方案3】:

    或者您可以使用filter 来“过滤”出负面因素。

    total = len(filter(lambda x: x &lt; 0, my_list))

    【讨论】:

    • 同时使用 lambdafilter() 比生成器表达式更慢且可读性更低。
    • @Lattyware Well filter 接受lambda。我只是喜欢一种功能性的方法:)。我100%同意你。我什至 +1 你的回答。
    • filter 接受一个函数 - 使用 lambda 创建它只是在某些情况下有用。我只是评论说这通常是完成这项任务的一种更糟糕的方式。
    • python 背后的大多数人都讨厌使用lamdas,但是他们已经获得了大量的追随者。我尽量避免它们。
    • @squiguy 你还依赖filter 构建一个list,这会浪费空间,也意味着你必须在python 3 下添加对list(...) 的封闭调用