Положительный счет // Отрицательная сумма

Довольно простая проблема, но я все еще практикую перебирать несколько переменных с циклами for. Ниже я пытаюсь вернуть новый список, где x - количество положительных чисел, а y - сумма отрицательных чисел из входного массива. arr.

Если входной массив пустой или нулевой, я должен вернуть пустой массив.

Вот что у меня есть!

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

В настоящее время получает...

Ошибка типа: объект 'int' не повторяется

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]
>>> 

Просто используйте 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

Путь Вима хорош. 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]
Другие вопросы по тегам