【发布时间】:2018-10-19 04:02:32
【问题描述】:
我正在尝试获取list(以下orig_list),并返回list(以下new_list):
- 不包含重复项(即仅包含唯一元素)
- 按倒序排列
这是我目前所拥有的,看起来……我会说“奇怪”,尽管我确信有更好的说法。对于看起来很简单的事情,我通常会因为两次使用list() 而被推迟,然后我想知道这种方法的效率。
new_list = list(reversed(sorted(list(set(orig_list)))))
问题 #1(SO 风格的问题):
下列命题正确吗?
- 没有比将
list转换为set并返回更有效的方法来获取list的唯一元素。 - 由于 sets are unordered in Python 必须 (1) 在删除重复项之前转换为集合,否则您无论如何都会丢失排序,并且 (2) 您必须在排序之前转换回列表。
- 使用 list(reversed()) 在编程上等同于使用 list.sort(reversed=True)。
问题 #2(奖励):
有没有什么方法可以在更少的操作系统中实现相同的结果,或者使用更简洁的方法?如果是这样,什么是 / 是一些例子吗?
【问题讨论】:
-
在执行 O(n lg n) 的“降序排序”之后,可以删除 O(n) 中的重复项。这是因为,在排序之后,任何重复项都会彼此相邻。