Python 尝试在一行中写入循环

Python 尝试在一行中写入循环,python,for-loop,python-3.x,python-3.3,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]) 如果需要,我不在乎覆盖列表1,也不在乎不使用“plop”,我也不想使用set。 谢谢 p、 “编辑”是一个打字错误,对不起,我不知道为什么需要“单行线”,但你可以通过理解来做到 plop=[new_ls

我正在使用python 3.3 我一直试图把这一行写在一行中,但我做不到

   plop = []
   for i in range (len(list1)):
      if list1[i] != list1[i-1]:
           plop.append(list1[i])
如果需要,我不在乎覆盖列表1,也不在乎不使用“plop”,我也不想使用set。 谢谢


p、 “编辑”是一个打字错误,对不起,我不知道为什么需要“单行线”,但你可以通过理解来做到

plop=[new_ls[i]表示范围内的i(len(list1)),如果list1[i]!=list1[i-1]]
…或者如果您不是真的想比较第一个值的第一个元素和最后一个元素

plop = [v for (x,y,v) in zip(list1, [None]+list1, new_ls) if x != y]

我不知道为什么会有“单行线”的要求,但你可以通过理解来做到这一点

plop=[new_ls[i]表示范围内的i(len(list1)),如果list1[i]!=list1[i-1]]
…或者如果您不是真的想比较第一个值的第一个元素和最后一个元素

plop = [v for (x,y,v) in zip(list1, [None]+list1, new_ls) if x != y]
更具可读性(并且不太容易出现索引错误-除非您打算将第一个元素与最后一个元素进行比较,将第二个元素与第一个元素进行比较等等)。删除连续重复项的方法是:

from itertools import groupby
plop = [k for k, g in groupby(list1)]
当然,你可以“一行”:

或者,如果不使用集合,并且不能有任何重复项-连续或不连续:

from collections import OrderedDict
plop = list(OrderedDict.fromkeys(list1))
更具可读性(并且不太容易出现索引错误-除非您打算将第一个元素与最后一个元素进行比较,将第二个元素与第一个元素进行比较等等)。删除连续重复项的方法是:

from itertools import groupby
plop = [k for k, g in groupby(list1)]
当然,你可以“一行”:

或者,如果不使用集合,并且不能有任何重复项-连续或不连续:

from collections import OrderedDict
plop = list(OrderedDict.fromkeys(list1))

抱怨我正要写
OrderedDict
案例,如果元素是可散列的,这就是我在实践中使用的。您的
groupby
解决方案更通用。@DSM我倾向于现在保存
more\u itertools
的最新副本,然后使用
unique\u everseed
配方,而不是
OrderedDict
,但是。。。关于元素必须是可散列的这一点很好。。。我想应该补充一点,当使用
groupby
-元素必须是可排序的:)如果没有重复的元素(当然可能是打字错误),他似乎在从另一个列表中挑选元素,这就是我选择理解路线的原因。如果是打字错误,是的,最好不要重复内置内容。@JoachimIsaksson啊哈。。。。非常好的地点-那将是完全不同的。。。还有一点奇怪。。。因此,如果这一点得到澄清,那将是很方便的:)抱怨我正要写
OrderedDict
案例,如果元素是可散列的,那么这就是我在实践中使用的。您的
groupby
解决方案更通用。@DSM我倾向于现在保存
more\u itertools
的最新副本,然后使用
unique\u everseed
配方,而不是
OrderedDict
,但是。。。关于元素必须是可散列的这一点很好。。。我想应该补充一点,当使用
groupby
-元素必须是可排序的:)如果没有重复的元素(当然可能是打字错误),他似乎在从另一个列表中挑选元素,这就是我选择理解路线的原因。如果是打字错误,是的,最好不要重复内置内容。@JoachimIsaksson啊哈。。。。非常好的地点-那将是完全不同的。。。还有一点奇怪。。。因此,如果能够澄清这一点,这将是非常方便的:)正如@JonClements指出的,您的代码在第一步将
list1[0]
list1[-1]
进行比较,因此
[1,2,1]
将生成
[new\u ls[1],new\u ls[2]]
。这是故意的,还是一个bug?正如@JonClements指出的,您的代码在第一步将
list1[0]
list1[-1]
进行比较,因此
[1,2,1]
将生成
[new_ls[1],new_ls[2]
。这是故意的,还是一个bug?