关于python中 集合(set) 的语法疑问在python中输入:[x ** 2 for x in [1,2,3,4]]结果是:[1,4,9,16]而输入:{x ** 2 for x in [1,2,3,4]}结果是:{16,1,4,9}怎么会这样?虽然集合好像是不分顺序的,但是这样乱排序

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/24 06:19:29
关于python中集合(set)的语法疑问在python中输入:[x**2forxin[1,2,3,4]]结果是:[1,4,9,16]而输入:{x**2forxin[1,2,3,4]}结果是:{16,

关于python中 集合(set) 的语法疑问在python中输入:[x ** 2 for x in [1,2,3,4]]结果是:[1,4,9,16]而输入:{x ** 2 for x in [1,2,3,4]}结果是:{16,1,4,9}怎么会这样?虽然集合好像是不分顺序的,但是这样乱排序
关于python中 集合(set) 的语法疑问
在python中输入:
[x ** 2 for x in [1,2,3,4]]
结果是:
[1,4,9,16]
而输入:
{x ** 2 for x in [1,2,3,4]}
结果是:
{16,1,4,9}
怎么会这样?虽然集合好像是不分顺序的,但是这样乱排序也太奇怪了

关于python中 集合(set) 的语法疑问在python中输入:[x ** 2 for x in [1,2,3,4]]结果是:[1,4,9,16]而输入:{x ** 2 for x in [1,2,3,4]}结果是:{16,1,4,9}怎么会这样?虽然集合好像是不分顺序的,但是这样乱排序
集合用的实现是散列
python的散列表初始一般有8个槽
1对应1号槽 (1%8=1)
4对应4号槽 (4%8=4)
9对应?(9%8=1 重复,所以再散列到某位置)
而16则对应0号槽 (16%8=0)

集合根本没有顺序一说,所以也没有乱排序这种事,就别在“显示出来是什么顺序”这个问题上纠缠了。

{16, 1, 4, 9} ...set...