我编写了这个python函数,它将列表作为参数,并确定列表中的哪些元素是完美的正方形,然后返回仅包含那些选择元素的新列表。
这是我的功能:
def square(n):
return n**2
def perfectSquares1(L):
import math
m=max(L)
for n in L:
if type(n) is int and n>0:
Result=map(square,range(1,math.floor(math.sqrt(m))))
L1=list(Result)
L2=list(set(L).intersection(set(L1)))
return L2
但是现在我想重新尝试一下:我想编写一个单行布尔函数,它将n作为参数,如果n是一个完美的正方形则返回True,否则返回false。
有什么建议吗?我无法想办法让它只有一条线。
答案 0 :(得分:6)
lambda n: math.sqrt(n) % 1 == 0
答案 1 :(得分:3)
你可以这样做:
import math
def perfect_sq(n):
return n == int(math.sqrt(n)) * int(math.sqrt(n))
或者您可以使用:
import math
def perfect_sq(n):
return n == int(math.sqrt(n)) ** 2
答案 2 :(得分:1)
可以使用模运算符:
>>> def perfectsquare(n):
... return not n % n**0.5
...
>>> perfectsquare(36)
True
>>> perfectsquare(37)
False
>>> perfectsquare(25)
True
>>> perfectsquare(4215378*4215378)
True