【发布时间】:2022-01-25 02:38:09
【问题描述】:
Python 只是给了我奇怪的建议:
>>> import random
>>> random.sample({1: 2, 3: 4, 5: 6}, 2)
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
random.sample({1: 2, 3: 4, 5: 6}, 2)
File "C:\Users\*****\AppData\Local\Programs\Python\Python310\lib\random.py", line 466, in sample
raise TypeError("Population must be a sequence. For dicts or sets, use sorted(d).")
TypeError: Population must be a sequence. For dicts or sets, use sorted(d).
注意最后一个错误行的第二部分。如果我稍后要随机化,我为什么要排序?好像在浪费 O(n log n) 时间。
【问题讨论】:
-
这是错误的,因为 iter('foo') 是一个迭代器,而不是一个序列。你在哪个版本?我得到“对于 dicts,使用 list(d)。”)" .. 基本上,“找到一些方法将它变成一个列表”..
-
我想您可能会使用 sorted 来获得可靠的可重复结果。
-
@JeffUK 我用 dict 示例替换了它。但这无关紧要,因为我不是在问我为什么会出错。
-
@JeffUK 我从来没有问过我为什么会出错。我问,在标题和正文中,我为什么要排序。就是这个问题,没有别的。
-
@JeffUK 是的,大多数时候,两者都有效。所以奇怪的是 Python 告诉我这样做效率低下。有时,排序甚至 不起作用(如果 dict 键不支持比较)。