使用list.count使用.sort()就地对列表进行排序不起作用。为什么?

g999:

我正在尝试按其元素的频率对列表进行排序。

>>> a = [5, 5, 4, 4, 4, 1, 2, 2]
>>> a.sort(key = a.count)
>>> a
[5, 5, 4, 4, 4, 1, 2, 2]

a不变。然而:

>>> sorted(a, key = a.count)
[1, 5, 5, 2, 2, 4, 4, 4]

为什么这种方法不起作用.sort()

cs95:

您看到的是的某些CPython实现细节的结果list.sort再试一次,但是先创建一个副本a

a.sort(key=a.copy().count)
a
# [1, 5, 5, 2, 2, 4, 4, 4]

.sorta内部进行修改,因此a.count将产生无法预测的结果。这被记录为实现细节。

什么copy电话确实是它创建的副本a用途和列表的count的关键方法。您可以看到一些调试语句会发生什么:

def count(x):
    print(a)
    return a.count(x)

a.sort(key=count)
[]
[]
[]
...

a在内部访问时会显示为空列表.sort,并且[].count(anything)将是0这解释了为什么输出与输入相同-谓词都相同(0)。

OTOH,sorted创建一个新列表,因此没有这个问题。


如果您真的想按频率计数排序,那么惯用的方法是使用Counter

from collections import Counter

a.sort(key=Counter(a).get)
a
# [1, 5, 5, 2, 2, 4, 4, 4]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Lambda进行排序无法弄清楚为什么Java不起作用

为什么使用Rackunit进行的此测试不起作用?

为什么使用setInterval()进行反向for循环不起作用?

使用重新排序对 ggplot 列进行排序不起作用

使用 lambda 函数对数组列表进行排序不起作用

为什么“使用”不起作用,但“包含”却起作用?

为什么使用Xor运算符在选择排序中交换对象不起作用?

为什么在硒中使用元素列表不起作用,但是如果我使用WebDriver,它将起作用

使用整数键对 scala hashmap 进行排序不起作用

使用@Priority 进行 CDI 2 事件排序不起作用

为什么在使用jQuery折叠标头不起作用时进行过渡?

使用TSNE进行降维。为什么3D图形不起作用?

为什么使用我的活动模式对元组进行模式匹配不起作用?

为什么使用Sidekiq进行Redis命名间隔不起作用?

为什么使用套接字源和多个接收器进行流式查询不起作用?

为什么使用泛型类型进行转换不起作用?

为什么在列表中使用 x 并更改 x 的值在 Python 中不起作用

当我尝试使用“ for”循环更改列表的值时,为什么代码不起作用(在此)?

list <li> 排序在使用 load() 时不起作用

为什么我们需要使用Collection.sort()方法对List进行排序?

为什么在使用py2exe进行编译之前声音在Pygame中起作用,而在使用py2exe进行编译之后却不起作用?

为什么“ lsof”在ssh中使用时不起作用?

为什么使用 jquery 后 Colspan 不起作用?

为什么使用JQuery复选框不起作用

为什么 FindOneAndUpdate 在使用 $in 时在 mongoose 中不起作用

为什么我的命令在使用别名时不起作用?

为什么使用go块的clojure代码不起作用?

keyCode和不赞成使用的-为什么不起作用?

为什么在使用 addPolygon() 方法时 setPos() 不起作用?