Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取一个列表,按人气排序,然后删除重复项_Python - Fatal编程技术网

Python 获取一个列表,按人气排序,然后删除重复项

Python 获取一个列表,按人气排序,然后删除重复项,python,Python,可能重复: 大家好 我正在寻找一种简单的方法,按流行程度对列表进行排序,然后删除重复的元素 例如,给定一个列表: [8, 8, 1, 1, 5, 8, 9] 最后,我会列出如下清单: [8, 1, 5, 9] 请参阅文档以获取与旧版本兼容的实现的链接。@SilentGhost为Python 2.7+提供了一个优秀的解决方案。对于2.6及以上版本,一个相对简单的解决方案: a = [8, 8, 1, 1, 5, 8, 9] popularity = sorted(set(a), key=l

可能重复:

大家好

我正在寻找一种简单的方法,按流行程度对列表进行排序,然后删除重复的元素

例如,给定一个列表:

[8, 8, 1, 1, 5, 8, 9]
最后,我会列出如下清单:

[8, 1, 5, 9]

请参阅文档以获取与旧版本兼容的实现的链接。

@SilentGhost为Python 2.7+提供了一个优秀的解决方案。对于2.6及以上版本,一个相对简单的解决方案:

a = [8, 8, 1, 1, 5, 8, 9]

popularity = sorted(set(a), key=lambda x: -a.count(x))

[8, 1, 5, 9]
但是,此解决方案的成本很高(因为
count

下面是另一个使用临时字典的更好解决方案:

a = [8, 8, 1, 1, 5, 8, 9]
d = {}
for i in a:
    d[i] = d.get(i, 0) + 1
popularity = sorted(d, key=d.get, reverse=True)

你应该举个更好的例子。在你的作品中,流行的顺序与数字的自然顺序相同。如果你有两个9,是不是
[1,3,9,5]
?是的。抱歉搞混了@卡姆:你不能按人气来给一个名单排序。您必须创建包含计数的其他中间结构。您还看过哪些其他结构?您应该提到,
Counter
仅在Python 2.7+中可用。这是pre 2.7的一个实现:(或者可以只使用普通循环和dict;)@Felix:在
计数器
之前,有
defaultdict
:)这对于大型列表来说非常昂贵。@SilentGhost-你说得对。我用dict添加了一个更好的解决方案。我认为
key=d.get
就足够了。
a = [8, 8, 1, 1, 5, 8, 9]
d = {}
for i in a:
    d[i] = d.get(i, 0) + 1
popularity = sorted(d, key=d.get, reverse=True)