我试图仅对列表中的正数进行平方。但是,当我尝试代码时,它将所有代码都放在一边
def squarethis(numbers):
for n in numbers:
if n > 0:
return[n ** 2 for n in numbers]
print(squarethis([1, 3, 5, -81]))
为什么它对所有数字都是正方形的? if语句应该将权利过滤掉吗?
答案 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]