我正在尝试编写函数,根据通过*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)
答案 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