【问题标题】:Positive Count // Negative Sum正数 // 负数
【发布时间】:2017-01-31 08:08:49
【问题描述】:

一个相当简单的问题,但我仍在练习使用 for 循环迭代多个变量。在下面,我试图返回一个新列表,其中 x 是正数的计数,y 是输入数组arr.中负数的总和@

如果输入数组为空或null,我将返回一个空数组。

这就是我所拥有的!

def count_positives_sum_negatives(arr):
    return [] if not arr else [(count(x), sum(y)) for x, y in arr]

目前正在接收...

TypeError: 'int' 对象不可迭代

【问题讨论】:

  • 除了TypeError,不知道在哪里插入x为正y为负的条件。
  • 你能举一个arr的例子吗?
  • @picmate arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]跨度>
  • 你会得到 TypeError: 'int' object is not iterable,因为 y 或 x 在给定时刻是一个整数。 sum 适用于列表。
  • 您将如何修改我写的内容以反映这一点?

标签: python list-comprehension multiple-variable-return


【解决方案1】:

只需使用sum 理解

>>> arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]
>>> sum(1 for x in arr if x > 0)
10
>>> sum(x for x in arr if x < 0)
-65

【讨论】:

  • 但是我如何返回一个包含两个变量的新列表?
  • 好吧,只需将它们分配给局部变量 c,s 然后返回 [c,s]
【解决方案2】:

wim 的方法很好。 Numpy 也适用于这些类型的事情。

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15])
print([arr[arr >= 0].size, arr[arr < 0].sum()])
>> [10, -65]

【讨论】:

    【解决方案3】:

    您得到的错误来自这部分 for x,y in arr,这意味着 arr 应该是 2 个元素(或任何类似容器)的元组列表,例如这个 [(1,2), (5,7), (7,9)] 但你所拥有的是一个数字列表,其中不包含任何其他内容......

    现在要获得您想要的结果,您可以使用 wim 的解决方案,它需要遍历列表两次,或者您可以一次性获得它

    >>> def fun(iterable):
            if not iterable:
                return []
            pos = 0
            neg = 0
            for n in iterable:
                if n>=0:
                    pos = pos + 1
                else:
                    neg = neg + n
            return [pos, neg]
    
    >>> arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15]
    >>> fun(arr)
    [10, -65]
    >>> 
    

    【讨论】:

    • 我非常喜欢这个,谢谢你们!我为适应其他输入测试所做的一项修改是将第 7 行更改为 >,因为这个问题似乎将 0 视为非正数。
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多