python - 从列表中删除重复项并按相反顺序排序的最佳/最pythonic方法

标签 python list sorting set

我正在尝试获取一个list(下面的orig_list),并返回一个list(new_list下面)其中:

  • 不包含重复项(即仅包含唯一元素)
  • 倒序排列

这是我目前所知道的,这似乎...我要说“奇怪”,但我确信有更好的表达方式。我对两次使用 list() 感到很反感,因为这看起来非常简单,然后我想知道这种方法的效率。

new_list = list(reversed(sorted(list(set(orig_list)))))

问题 #1(SO 风格的问题):

下列命题正确吗?

  1. 没有比将 list 转换为 set 并返回更有效的方法来获取 list 的唯一元素。
  2. sets are unordered in Python必须 (1) 在删除重复项之前转换为集合,否则无论如何都会丢失排序,并且 (2) 在排序之前必须转换回列表。
  3. 使用 list(reversed()) 在编程上等同于使用 list.sort(reversed=True)。

问题 #2(奖金):

有没有什么方法可以用更少的 O 或使用更简洁的方法来达到相同的结果?如果是这样,什么是/有一些例子吗?

最佳答案

sorted(set(orig_list), reverse=True)

代码最短,效率更高,结果相同。

根据大小,如 user2864740 在评论中建议的那样,先排序然后在线性时间内进行重复数据删除可能会或可能不会更快。 (该方法的最大缺点是它将完全在 Python 中,而上面的行主要在 native 代码中执行。)

您的问题:

  • 您不需要在集合和列表之间来回转换。 sorted 接受任何可迭代对象,因此 set 符合条件并吐出一个列表,因此不需要进行后转换。

  • reversed(sorted(x)) 等同于sorted(x, reverse=True)。您会得到相同的结果,但速度较慢 - sort 无论是正向还是反向都具有相同的速度,因此 reversed 正在添加一个额外的操作,如果您排序到正确的则不需要从头开始订购。

关于python - 从列表中删除重复项并按相反顺序排序的最佳/最pythonic方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885743/

相关文章:

python - 在 Python 中,如何在保留词序的同时从两个列表中找到常用词?

python - 筛选列表

Python 电子邮件包未在 Ubuntu 机器上导入

python - 如何使用 Python-Flask 在同一网络上找到客户端的 MAC 地址?

python - 正则表达式:不在列表中 - Python

python - Python 3 OpenCV无法录制和保存视频

C++ 列表字符获取问题,内存分配错误?

c++ - 为什么快速排序会引发异常 “write access violation”

python - 如果另一个数组不继续,则通过重复值扩展数组

python - 以中间元素为轴心进行快速排序