首页 > 解决方案 > 无法使用带有 if 条件的列表推导从现有列表创建重复列表

问题描述

我有一个带有重复元素的排序列表,例如

>>> randList = [1, 2, 2, 3, 4, 4, 5]
>>> randList
[1, 2, 2, 3, 4, 4, 5]

我需要创建一个删除相邻重复元素的列表。我可以这样做:

>>>> dupList = []
     for num in nums:
       if num not in dupList:
         dupList.append(num)

但我想通过列表理解来做到这一点。我尝试了以下代码:

>>> newList = []
>>> newList = [num for num in randList if num not in newList]

但我得到的结果就像 if 条件不起作用。

>>> newList
[1, 2, 2, 3, 4, 4, 5]

任何帮助,将不胜感激。谢谢!!

编辑1:鉴于我提供的数据,问题的措辞似乎确实令人困惑。我正在使用的 for 循环将删除所有重复项,但由于我事先对列表进行了排序,因此在删除相邻的重复项时应该不成问题。

标签: pythonlistif-statementlist-comprehension

解决方案


Usingitertools.groupby是删除相邻(且仅相邻)重复项的最简单方法,即使对于未排序的输入也是如此:

>>> from itertools import groupby
>>> [k for k, _ in groupby(randList)]
[1, 2, 3, 4, 5]

在保持出现顺序的同时删除所有重复项可以使用OrderedDict. 这也适用于有序和无序输入:

>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(randList))
[1, 2, 3, 4, 5]

推荐阅读