我想识别数字列表中完美正方形的数字,例如:
a = [3, 4, 8, 16, 21, 58, 144] # return [4, 16, 144]
Run Code Online (Sandbox Code Playgroud)
一旦方法是构建谓词(函数返回true或false)并将其应用于filter():
>>> def is_perfect_square(n):
return round(n ** 0.5) ** 2 == n
>>> list(filter(is_perfect_square, [3, 4, 8, 16, 21, 58, 144]))
[4, 16, 144]
Run Code Online (Sandbox Code Playgroud)
或者对于那些喜欢使用filter()的列表推导的人:
>>> [x for x in [3, 4, 8, 16, 21, 58, 144] if is_perfect_square(x)]
[4, 16, 144]
Run Code Online (Sandbox Code Playgroud)
完美的平方测试通过获取数字的平方根并将其四舍五入到最接近的整数,重新平方并将其与原始数字进行比较来工作.平方根步骤可能会出现一点舍入误差,但舍入整数将是精确的.除非是非常大的输入,否则这应该有点强大.
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |