试图在一行中写一个循环

时间:2013-11-30 16:32:49

标签: python for-loop python-3.x python-3.3

我正在使用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编辑是一个错字,对不起

2 个答案:

答案 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]