如果所有其他频率都相同,集合中的计数器是否在考虑频率后保持顺序?
Does Counter from collections maintain order after frequency has been considered, if all other frequencies are the same?
集合中的计数器在考虑频率后是否保持顺序?
例如
s= "leetcode"
cnt = Counter(s)
for el in s:
if cnt[el] == 1:
return el
所以对于上面的代码,输出看起来像这样:
Counter({'e': 3, 'l': 1, 't': 1, 'c': 1, 'o': 1, 'd': 1})
现在,我知道计数器按降序显示 key/value,因此 'e' 首先出现,因为它的最高计数为 3,但在此之后所有其他元素的计数器都为 1-这意味着计数器将始终保持 string/array 的顺序?它显然适用于上面的示例,但我想确保不仅仅是我的 IDE 这样做 (Pycharm)
A Counter
实际上只是具有一些额外功能的 dict
。底层字典在 Python 的最新版本中保留了插入顺序,正如所谓的 in the docs:
Changed in version 3.7: As a dict
subclass, Counter
Inherited the capability to remember insertion order.
你可以看到这个,如果你打印键,保持它们在源字符串中的顺序:
>>> print(cnt.keys())
dict_keys(['l', 'e', 't', 'c', 'o', 'd'])
但是,请注意 __repr__
对订单有特定处理:
def __repr__(self):
if not self:
return f'{self.__class__.__name__}()'
try:
# dict() preserves the ordering returned by most_common()
d = dict(self.most_common())
except TypeError:
# handle case where values are not orderable
d = dict(self)
return f'{self.__class__.__name__}({d!r})'
Counter
显示 most_common
顺序,其当前文档说:
Elements with equal counts are ordered in the order first encountered
实现使用sorted
,即:
...guaranteed to be stable. A sort is stable if it guarantees not to
change the relative order of elements that compare equal...
因此保留具有相同计数的元素的插入顺序。
但是,most_common
文档的
Elements with equal counts are ordered arbitrarily
因为字典的开头是任意排序的。
集合中的计数器在考虑频率后是否保持顺序?
例如
s= "leetcode"
cnt = Counter(s)
for el in s:
if cnt[el] == 1:
return el
所以对于上面的代码,输出看起来像这样:
Counter({'e': 3, 'l': 1, 't': 1, 'c': 1, 'o': 1, 'd': 1})
现在,我知道计数器按降序显示 key/value,因此 'e' 首先出现,因为它的最高计数为 3,但在此之后所有其他元素的计数器都为 1-这意味着计数器将始终保持 string/array 的顺序?它显然适用于上面的示例,但我想确保不仅仅是我的 IDE 这样做 (Pycharm)
A Counter
实际上只是具有一些额外功能的 dict
。底层字典在 Python 的最新版本中保留了插入顺序,正如所谓的 in the docs:
Changed in version 3.7: As a
dict
subclass,Counter
Inherited the capability to remember insertion order.
你可以看到这个,如果你打印键,保持它们在源字符串中的顺序:
>>> print(cnt.keys())
dict_keys(['l', 'e', 't', 'c', 'o', 'd'])
但是,请注意 __repr__
对订单有特定处理:
def __repr__(self):
if not self:
return f'{self.__class__.__name__}()'
try:
# dict() preserves the ordering returned by most_common()
d = dict(self.most_common())
except TypeError:
# handle case where values are not orderable
d = dict(self)
return f'{self.__class__.__name__}({d!r})'
Counter
显示 most_common
顺序,其当前文档说:
Elements with equal counts are ordered in the order first encountered
实现使用sorted
,即:
...guaranteed to be stable. A sort is stable if it guarantees not to change the relative order of elements that compare equal...
因此保留具有相同计数的元素的插入顺序。
但是,most_common
文档的
Elements with equal counts are ordered arbitrarily
因为字典的开头是任意排序的。