试图在一个lin中写一个循环

2024-04-26 04:51:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.3 我一直想把这一行写在一行里,但我写不好。你知道吗

   plop = []
   for i in range (len(list1)):
      if list1[i] != list1[i-1]:
           plop.append(list1[i])

如果需要,我不在乎覆盖list1,也不在乎使用“plop”,我也不想使用set。 谢谢!你知道吗

p.s.是个错别字,抱歉


Tags: inforlenifrangesetappendplop
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]

更具可读性(而且不容易出现索引错误-除非您打算将第一个元素与最后一个元素进行比较,将第二个元素与第一个元素进行比较等等…)删除连续重复项的方法是:

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))

相关问题 更多 >