我正在使用python 3.3 我一直试图在一行中写这行,我无法管理。
plop = []
for i in range (len(list1)):
if list1[i] != list1[i-1]:
plop.append(list1[i])
如果需要,我不在乎覆盖list1,而根本不使用“plop”,我也不想使用set。 谢谢!
p.s编辑是一个错字,对不起
答案 0 :(得分:3)
更可读(并且不太容易出现索引错误 - 除非你的目的是将第一个元素与最后一个元素进行比较,第二个元素与第一个元素进行比较......)删除连续重复的方法就是你刚才做的:
from itertools import groupby
plop = [k for k, g in groupby(list1)]
当然,你可以“一线”:)
from itertools import groupby; plop = [k for k, g in groupby(list1)]
或者,如果不使用集合,并且不能有任何重复 - 连续或不连续:
from collections import OrderedDict
plop = list(OrderedDict.fromkeys(list1))
答案 1 :(得分:2)
我不确定为什么会出现'单行'要求,但你可以使用理解来做到这一点;
plop = [new_ls[i] for i in range(len(list1)) if list1[i] != list1[i-1]]
...或者如果你真的不想比较第一个值的第一个和最后一个元素;
plop = [v for (x,y,v) in zip(list1, [None]+list1, new_ls) if x != y]