set 和 list 的顺序不一样,这是为什么?

2014-09-22 17:18:43 +08:00
 awang
>>> M
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> [sum(row) for row in M]
[6, 15, 24]
>>> {sum(row) for row in M}
set([24, 6, 15])
5372 次点击
所在节点    Python
9 条回复
lnkisi
2014-09-22 17:22:07 +08:00
set是无序的
dorentus
2014-09-22 17:23:07 +08:00
一般来说任何语言里面叫 set 和 dict 的数据结构都不保证顺序的。

https://docs.python.org/2/library/sets.html 这边的标题就写了 unordered:
8.7. sets — Unordered collections of unique elements
xiandao7997
2014-09-22 17:26:00 +08:00
想回复的被1,2L说完了……速度真快
xiandao7997
2014-09-22 17:26:45 +08:00
再搬运下:Like other collections, sets support x in set, len(set), and for x in set. Being an unordered collection, sets do not record element position or order of insertion. Accordingly, sets do not support indexing, slicing, or other sequence-like behavior.
chrishine
2014-09-22 19:34:27 +08:00
C++里面的set,map是红黑树(无序的是unordered_set,unordered_map,哈希实现).Java不太清楚,应该也有某个实现是红黑树的吧.
ren2881971
2014-09-22 22:31:15 +08:00
java里有 HashSet 和 TreeSet 都是无序的 只不过算法不一样。
好像还有一个记不清了。。
stackpop
2014-09-23 10:12:17 +08:00
先理解什么是set, 什么是dict, 为什么有了list还需要set?
xinyewdz
2014-09-23 11:05:18 +08:00
@ren2881971 Java里treeset是有序的,排过序。
ren2881971
2014-09-23 23:35:25 +08:00
@xinyewdz 好吧 学习了。 平时都用HashSet 真没用过TreeSet

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/134994

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX