应用 `set()` 在列表中查找最大计数项时的细微差别

Subtle difference when apply `set()` to find max count items in a list

有朋友问过这个问题,我找不到很好的解释。 (他知道 max()key 在这种情况下是如何工作的)

给出如下分数列表:

lst = ['A', 'B', 'B', 'B', 'C', 'C', 'C', 'E']

>>> max(lst, key=lst.count)
'B'
>>> max(set(lst), key=lst.count)
'C'
# if run min - will return different results - w/ and w/o set():
>>> min(lst, key=lst.count)
'A'
>>> min(set(lst), key=lst.count)
'E'
>>> 

maxmin return 可迭代对象中的第一个最大/最小元素。

lst.count("A")lst.count("E") 相等(计算结果为 1),lst.count("B")lst.count("C") 也相等(计算结果为 3 ). set 在 Python 中是无序的,将 list 转换为 set 不会保留其顺序。 (aset的内部顺序是not exactly random, but arbirtrary。)

这就是结果不同的原因。

如果你想保持顺序,但有独特的元素,你可以这样做:

unique_lst = sorted(set(lst), key=lst.index)