python - collections.Counter().values() 视图似乎在某些条件下按键排序。为什么以及它们是什么?
问题描述
Python集合模块中的 Counter() 是一个无序容器,但是当从相同大小的整数构建时,values() 视图看起来好像 Counter 首先按键排序。这在我的计算机 (3.4.3rc1) 以及 Python 版本不超过 3.5 的在线 IDE (tio.run, ideone.com) 上始终如一地发生;3.6+ 或 PyPy 并非如此。
from collections import Counter
import random
def counter_is_sorted(iterable):
c = Counter(iterable)
return list(c.values()) == [v for k, v in sorted(c.items())]
print(counter_is_sorted([random.randrange(1000) for _ in range(50000)]))
True
当元素被更新并且对于其他类型和混合整数大小为假时,这并不总是正确的:
print(counter_is_sorted([random.randrange(65000, 66000) for _ in range(50000)]))
print(counter_is_sorted([round(random.uniform(0, 10), 2) for _ in range(50000)]))
print(counter_is_sorted([random.choice("abcdefghijklmnopqrstuvwxyz") for _ in range(50000)]))
False
False
False
这是设计使然还是取决于某些特定因素?在什么约束下,我们可以安全地假设 values() 视图被排序?
解决方案
推荐阅读
- mysql - GROUP CONCAT 和 LEFT OUTER JOIN 拆分
- lead - TikTok 潜在客户生成 - 错误轮询下载任务
- c++ - 无法使用 cv::VideoCapture 打开 .mp4
- angular - Autocomplet 不能在 Angular 中同时使用两个值?
- jquery - 如何在 sub-html 页面中调用 Jquery 代码?
- python - 根据python和selenium中的动态值选择字典名称
- arduino - 从jetson发送到arduino的数据
- java - Java 类不是使用 maven-jaxb2-plugin 从 wsdl 文件生成的
- javascript - 视图之间的转换
- pandas - 如何在熊猫中插入 groupby 对象?