【发布时间】:2019-06-10 18:35:32
【问题描述】:
可以通过将列表转换为字典或集合,然后再转换回列表来获得唯一元素列表。
>>> original_list = [1,2,3,4,5,6,7,8,9,2,4,6,8]
>>> original_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8]
>>>
>>> unique_via_set = list(set(original_list))
>>> unique_via_dict = list(dict.fromkeys(original_list))
>>>
>>> unique_via_set
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> unique_via_dict
[1, 2, 3, 4, 5, 6, 7, 8, 9]
^Python 3.7.3
主要问题:
这两种策略有什么区别?
子问题:
- 一种比另一种更有效吗?
- 是否有针对其中一个或另一个更优化的用例?
- 这两种策略的运行时间是否存在实际差异?
注意:我不是在寻找从列表中获取唯一元素的最佳或最快方法,而是在比较上述两种方法
编辑:同样,我不是在寻找如何删除重复项,我只是在寻找上述方法中的实际差异,如果有的话
【问题讨论】:
-
可能相关:softwareengineering.stackexchange.com/questions/112662/…,但基本上没有区别。字典使用成员测试来添加元素,与集合相同,因此理论上它应该是常数时间或 O(1)。
-
使用列表元素作为键来构建字典是可行的,因为不能有重复的键(尽管首先创建字典会产生开销),但是为什么不直接使用
sets正是为此目的而设计的,即独特物品的集合? -
你问了这么多问题。此外,它更多地基于意见。您可以检查时间以查看哪个更快。我会将其标记为 stackoverflow.com/questions/7961363/… 的重复项
-
这对我来说看起来不像是一个骗子,至少不是链接的问题 - 这是关于(已知)方法的性能。
-
我认为值得指出的是,当对可能阅读您代码的任何人使用集合时,您的意图会更加清晰。
标签: python python-3.x data-structures