python - 无法使用带有 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 循环将删除所有重复项,但由于我事先对列表进行了排序,因此在删除相邻的重复项时应该不成问题。
解决方案
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]
推荐阅读
- azure - 我可以在 azure 中升级 vm 的操作系统吗?
- linux - Bash - 传递给函数的参数中的空格
- python - tensor.numpy() 在 CustomLayer 中不起作用
- sql - Query not returning SUM, only giving separate values
- timezone - 如何更改我在 Centreon 上的支票的时区?
- javascript - 在反应引导表单元格上动态禁用按钮
- python - Python 装饰器无法识别全局变量
- r-exams - R/考试完形填空中的计数器太大
- excel - 为什么在运行以下宏时会打开“数据链路属性框”?
- c++ - 通过javascript函数指针访问C++枚举变量