Положительный счет // Отрицательная сумма
Довольно простая проблема, но я все еще практикую перебирать несколько переменных с циклами 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]