【发布时间】:2018-04-07 12:29:35
【问题描述】:
我有一个项目列表,我想在其中删除一个项目的任何重复项,但保留其余项目的任何重复项。 IE。我从以下列表开始
mylist = [4, 1, 2, 6, 1, 0, 9, 8, 0, 9]
我想删除0 的所有重复项,但保留1 和9 的重复项。
我目前的解决方案如下:
mylist = [i for i in mylist if i != 0]
mylist.add(0)
除了以下内容之外,还有什么好方法可以让0 出现一次吗?
for i in mylist:
if mylist.count(0) > 1:
mylist.remove(0)
对于本示例,第二种方法花费的时间是该示例的两倍多。
澄清:
目前,我不关心列表中项目的顺序,因为我目前在创建和清理后对其进行排序,但以后可能会改变。
目前,我只需要删除一个特定项目的重复项(在我的示例中为
0)
【问题讨论】:
-
此列表中的顺序重要吗?
-
您的第一个解决方案有什么问题?
[0] + [i for i in mylist if i != 0] -
我认为您很可能过于关注微小的性能差异,应该只使用您当前的解决方案之一。
-
另外,您仅需要专门删除重复的零,还是需要针对任意其他值的解决方案?
-
@DanielPryden 的意思是可能会编写一个不同的函数,它需要一个排序列表并且比任何其他解决方案都快,特别是如果要删除的项目是列表中可能的最小项目(其中 0 可能)
标签: python python-3.x list