在函数

时间:2018-05-23 15:23:54

标签: python list list-comprehension

我正在尝试编写函数,根据通过*args传入的值,打印出正数,负数和= 0的浮点数。我认为列表理解是获得这些值的有效方法,但以下是行不通的。我得到了一个' int' object不是可迭代的错误消息。有什么想法吗?

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 :(得分:2)

这可能是一种方法:

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为百分比。

答案 1 :(得分:1)

sum将迭代作为输入,因此在列表推导中,您只将它应用于一个元素,应该像这样修复,例如:

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

编辑

  

我想要每个pos的%数字,neg和零

你的算法应该是这样的:

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)

答案 2 :(得分:1)

如果您想根据元素计算百分比

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