为什么Python素数判断函数返回的set中False总是排在True前面
关于set集合中False始终排在True前面的问题解答
你遇到的展示顺序是Python的固定特性,原因如下:
- Python中
bool是int的子类,False等价于整数0,True等价于整数1 - 二者的哈希值和对应整数值完全一致:
hash(False) = 0,hash(True) = 1 - set底层基于哈希表实现,元素的存储和展示顺序由哈希值大小决定,哈希值更小的
False自然会排在True前面,和插入集合的先后顺序无关
你提供的代码片段:
def is_prime(number): return set(([True if number % i != 0 else False for i in range(2, number)])) print(is_prime(15))
另外你的素数判断实现存在可优化点:
- 无需遍历到
number-1,只要遍历到√number就可以完成素数判断 - 无需生成完整列表再转set,遍历到第一个能整除的因子即可提前返回结果,性能提升明显
- 函数返回set不符合语义,建议调整为直接返回布尔值,优化后参考实现:
def is_prime(number): if number <= 1: return False return all(number % i != 0 for i in range(2, int(number**0.5) + 1))
内容的提问来源于stack exchange,提问作者alonybbb
相关产品推荐
相关产品推荐

