如何仅排列列表中的正数?

时间:2016-09-13 15:33:35

标签: python list math int

我试图仅对列表中的正数进行平方。但是,当我尝试代码时,它将所有代码都放在一边

def squarethis(numbers):
for n in numbers:
    if n > 0:
        return[n ** 2 for n in numbers]

print(squarethis([1, 3, 5, -81]))

为什么它对所有数字都是正方形的? if语句应该将权利过滤掉吗?

2 个答案:

答案 0 :(得分:7)

只需使用一个列表理解:

def squarethis(numbers):
    return [n ** 2 for n in numbers if n > 0]

您在提供的代码中所做的是检查numbers中的第一个值是否为> 0,如果是,则使用numbers平方中的每个值返回列表理解。相反,您可以在列表推导中进行过滤,并返回列表。

答案 1 :(得分:0)

纯功能替代方案 - >

>>> map(lambda x: x**2, filter(lambda x: x > 0, [1, 2, 3, -1, -2, -3]))
[1, 4, 9]