繁体   English   中英

为什么Python按顺序打印一组数字

[英]Why does Python print a set of numbers as ordered

我尝试在 python 空闲 {6,3,7} 中打印此内容。 output 是 {3,6,7}。 集合不应该是无序的并且每次都打印不同的顺序吗? 是否与 hash 地图的构建方式有关?

Python 中的集合确实是无序的。 您的特定示例集恰好在迭代时以明显排序的顺序给出元素(并且在 python 2.7.6 和 3.4.3 中似乎可重现)这一事实并不能否定这一事实,另一个示例以既不是它们被添加到集合中的顺序,也不是排序的。

>>> list(set([6,3,7]))
[3, 6, 7]

>>> list(set([6,3,8]))
[8, 3, 6]

对于值 6、3 和 8,在包含这些值的 python 集合上的迭代将产生元素的顺序至少看起来是一致的,无论填充集合的顺序如何。 然而,这并没有说明这个结果是否普遍正确,无论如何它应该被视为一个实现细节。 用户代码根本不应假定任何排序。

>>> from sympy.utilities.iterables import multiset_permutations
>>> for p in multiset_permutations([3,6,8]): print(p, list(set(p)))
... 
([3, 6, 8], [8, 3, 6])
([3, 8, 6], [8, 3, 6])
([6, 3, 8], [8, 3, 6])
([6, 8, 3], [8, 3, 6])
([8, 3, 6], [8, 3, 6])
([8, 6, 3], [8, 3, 6])

看,我理解你的担心,当我第一次看到它时,我一开始也很困惑。 但我敢肯定,你知道集合是无序和无索引的。 因此,任何集合的元素都不可能是有序的。 尝试运行类似a = {6,2,90,4,12,0,4000,345}或您的示例 - 在 Jupyter Notebook、IDLE 或通过命令提示符。 它的排列方式不同。

在 Jupyter 上,它给出: {0, 2, 4, 6, 12, 90, 345, 4000}

在命令提示符下: {0, 4000, 2, 4, 6, 12, 345, 90}

而当你一个一个地打印一个集合的元素时,它会按顺序显示:

4000
2
4
6
12
345
90

我相信您正在尝试使用 Jupyter。 当您想在这里看到像a这样的变量时,它们似乎总是对其进行排序。

对于您的疑问,hash map 概念适用于字典,而不适用于集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM