python - is_prime 函数使用过滤器抽象函数
问题描述
我正在尝试使用“过滤”抽象函数来解决 is_prime 问题。我认为这是合乎逻辑的作品,但结果总是错误的。当我添加'print(lon)'时,试图找出问题所在。它输入了一些我不明白的东西。
我尝试了递归方式,它有效。
def is_prime(n):
if n == 2:
return True
lon = filter (lambda x: n % x == 0, list(range (2, n)))
if lon == []:
return True
else:
return False
结果总是假的。
通过添加
print(lon)
跑步
is_prime(7)
结果是
<filter object at 0x039456D0>
False
解决方案
过滤器对象永远不会 == 到列表,所以你总是会得到错误的。相反,请检查过滤器是否为空。
def is_prime(n):
if n == 2:
return True
lon = filter (lambda x: n % x == 0, list(range (2, n)))
try:
min(lon)
except ValueError:
return True
return False
编辑:更清洁的方式
def is_prime(n):
if n == 2:
return True
lon = filter (lambda x: n % x == 0, list(range (2, n)))
if not any(lon):
return True
else:
return False
推荐阅读
- javascript - 为什么等待延迟在函数范围结束时结束
- python - 在 miniconda 环境中使用 conda 和 pip 发生冲突
- excel - 遍历命名范围的所有值
- node.js - 如何在节点中同步redis get/set
- ios - 'registerExtension()' 已重命名为 'register()'
- perl - 在 Perl 中 Math::BigInt 与标量的比较
- android - 如何在我的 Android 应用程序中加载 OpenCV 管理器包?
- swift - 在 Swift 5 中使用未解析的标识符“self”
- html - Cube 在 Chrome 和 Firefox 中旋转,但在 Safari 中不旋转
- mysql - 即使禁用了严格模式,MySQL 错误 1055