【问题标题】:pop() always returns the same on an int set{}?pop() 在 int set{} 上总是返回相同的结果?
【发布时间】:2021-02-23 19:49:47
【问题描述】:

在第一个集合(字符串集合)中,pop() 方法将完美运行,但对于第二个集合(一个 int 集合),它始终只会弹出集合中的“第一个”位置/索引。不是随机的。

Set_with_string_data = {"Brunno", "Silva", "Pereira"}
Set_with_string_data.pop()
print(Set_with_string_data)

每次输出不同的东西:

{"Brunno", "Silva"}
{"Silva", "Pereira"}
{"Pereira", "Brunno"}

但是这个:

Set_with_integer_data = {1, 2, 3, 4}
Set_with_integer_data.pop()
print(Set_with_integer_data)

总是输出:

{2, 3, 4}
{2, 3, 4}
{2, 3, 4}

【问题讨论】:

    标签: python string integer set


    【解决方案1】:

    你说的不是真的。它与列表元素和特定解释器的哈希值有关。 试试这个,你很可能仍然会看到 1 个弹出窗口

    Set_with_intenger_data = {4, 3, 2, 1}
    Set_with_intenger_data.pop()
    print(Set_with_intenger_data)
    

    【讨论】:

    • 好的,我明白了。但这不应该总是带走一个新的随机元素吗?
    • 正如所说,这与 set 的内部数据结构有关(它依赖于元素的 hash() 值)。它绝不是随机的,也不要指望它的行为。相反,使用真正的随机生成器并选择。
    • 哦。行。现在我懂了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多