Использование понимания списка для дробных результатов в функции - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь написать функцию, которая выводит дробные доли% положительных чисел, отрицательных чисел и чисел, которые = 0, на основе значений, переданных через *args.Я полагал, что понимание списка было бы эффективным способом получить эти значения, но следующее не работает.Я получаю 'int' объект не повторяемое сообщение об ошибке.Есть идеи?

def plusMinus(*args):
    list_1 = []
    count = 0
    for i in args:
        list_1.append(i)
        count += 1
    pos = [i % sum(i) for i in list_1 if i > 0]
    neg = [i % sum(i) for i in list_1 if i < 0]
    zero = [i % sum(i) for i in list_1 if i == 0]
    num = count
    print(num)
    print(args)
    print(pos)
    print(neg)
    print(zero)

plusMinus(10, 25, 30, 0, -45, -50)

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Если вы хотите рассчитать процент в зависимости от элементов

>>> pos = sum([1 for i in list_1 if i > 0]) / len(list_1) * 100
50.0
>>> neg = sum([1 for i in list_1 if i < 0]) / len(list_1) * 100
33.33333333333333
>>> zero = sum([1 for i in list_1 if i == 0]) / len(list_1) * 100
16.666666666666664
0 голосов
/ 23 мая 2018

это может быть подход:

def plusMinus(*args):

    num = len(args)
    pos = sum(1 for i in args if i > 0)
    neg = sum(1 for i in args if i < 0)
    # zero = sum(1 for i in args if i == 0)
    zero = num - pos - neg

    print('pos: {:1.1%}'.format(pos/num))
    print('neg: {:1.1%}'.format(neg/num))
    print('zero: {:1.1%}'.format(zero/num))

plusMinus(10, 25, 30, 0, -45, -50)

, который выводит:

pos: 50.0%
neg: 33.3%
zero: 16.7%

обратите внимание, что форматирование строки может выводить float s в процентах.

0 голосов
/ 23 мая 2018

sum принимает в качестве входных данных итерацию, поэтому в своем понимании списка вы применяете его только к одному элементу, должно быть исправлено, например, так:

[i % sum(list_1) for i in list_1 if i > 0]

РЕДАКТИРОВАТЬ

Я хочу% числа для каждого pos, neg и zero

Ваш алгоритм должен быть таким:

def plusMinus(*args):
    size = len(args)
    pos  = len([i for i in args if i > 0])/size
    neg  = len([i for i in args if i < 0])/size
    zero = len([i for i in args if i == 0])/size
    print(pos*100)
    print(neg*100)
    print(zero*100)
...