应用 `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'
>>>
max
和 min
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)
有朋友问过这个问题,我找不到很好的解释。 (他知道 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'
>>>
max
和 min
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)