【发布时间】:2017-12-25 03:29:42
【问题描述】:
您好,我在 python 3.6 中发现:
cnt = collections.Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(cnt) # >>> Counter({'blue': 3, 'red': 2, 'green': 1})
在文档中,它说'elements() 返回一个遍历元素的迭代器,每个元素重复其计数的次数。元素以任意顺序返回。'
但是:
print(list(cnt.elements()))
永远给我:
['red', 'red', 'blue', 'blue', 'blue', 'green']
我不认为它是任意顺序了,它取决于原始数据出现的顺序:
cnt = collections.Counter(['red', 'green', 'red', 'blue', 'blue', 'blue'])
print(list(cnt.elements()))
# >>> ['red', 'red', 'green', 'blue', 'blue', 'blue']
如果我在列表中切换“蓝色”和“绿色”,我将在cnt.elements() 中的“蓝色”之前得到“绿色”
我的发现是正确的还是我的做法不对?
【问题讨论】:
-
来自 Raymond Hettinger “raymondh #python 新闻:???? gvanrossum 刚刚宣布字典现在保证保留插入顺序。这是漫长旅程的结束。” 2017 年 12 月 15 日上午 8:40。twitter.com/raymondh/status/941709626545864704
-
来自 Guido van Rossum "gvanrossum 回复 yaroslavvb raymondh ogrisel 这个线程中的第一个好问题。集合保持无序。(为什么?使用模式不同。另外,不同的实现。)"。晚上 10:05 - 2017 年 12 月 15 日。twitter.com/raymondh/status/941709626545864704