【问题标题】:Why the False object is always first and the True is second?为什么 False 对象总是第一而 True 是第二?
【发布时间】:2021-11-30 18:33:49
【问题描述】:

嗨,我做了这个程序来检查数字是否在 1 行中是素数,但我没有找到任何关于它的信息。每次集合中的 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))

【问题讨论】:

标签: python set


【解决方案1】:

集合是无序的,所以{False, True}{True, False} 之间没有区别。任何一种渲染都是“正确的”,你不应该围绕任何特定的顺序建立任何假设(即使在实践中你看到它是按排序顺序渲染的——AFAIK 这是标准 CPython 实现的一个属性,但不是语言,因此如有更改,恕不另行通知)。

>>> {False, True} == {True, False}
True
>>> {False, True}
{False, True}
>>> {True, False}
{False, True}

你可能一开始就不想从这个函数返回一个集合。尝试使用 all 函数将生成器表达式转换为单个布尔值:

>>> def is_prime(number):
...     return all(number % i for i in range(2, number))
...
>>> is_prime(15)
False
>>> is_prime(7)
True

如果您要测试您的 set 仅包含 True,这将产生等效结果:

>>> def is_prime(number):
...     return {True} == set(([True if number % i != 0 else False for i in range(2, number)]))

但显然代码少了很多,而且运行速度也更快,因为不需要在内存中构建整个列表并将其转换为集合; all 函数在遇到第一个 False 值时立即停止从生成器读取值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多