Python中向Set添加元素的输出顺序是否具有随机性?
关于Python Set元素添加顺序的疑问
代码示例
roads = set() connections = [[0,1],[1,3],[2,3],[4,0],[4,5]] for u, v in connections: roads.add((u, v)) print(roads)
运行结果
{(0, 1)} {(0, 1), (1, 3)} {(0, 1), (2, 3), (1, 3)} {(0, 1), (4, 0), (2, 3), (1, 3)} {(0, 1), (4, 0), (2, 3), (4, 5), (1, 3)}
问题解答
Python里普通的set(也就是你代码中使用的这种)不是随机排序,它的元素顺序既不遵循插入顺序,也不是随机生成的。这是因为set内部基于哈希表实现,每个元素的存储位置由其哈希值计算得出,打印时的遍历顺序就是哈希表的存储顺序,和插入元素的顺序没有直接关联。
如果需要能保留插入顺序的集合类型,在Python 3.7及以上版本,可以用dict的键来模拟(从3.7开始官方保证dict保留插入顺序,且键具有唯一性),写法示例:ordered_roads = dict.fromkeys(connections).keys();也可以使用collections模块的OrderedDict来实现类似效果。
内容的提问来源于stack exchange,提问作者DrNogNog
相关产品推荐
相关产品推荐

