答案 0 :(得分:7)
如果您只需要删除相邻的事件,请尝试:
reduce(lambda x,y: x+[y] if x==[] or x[-1] != y else x, your_list,[])
如果您需要删除除一次以外的所有事件,请尝试:
reduce(lambda x,y: x+[y] if not y in x else x, your_list,[])
答案 1 :(得分:3)
你可以尝试:
In [29]: a = [1,2,2,3,3,3,4]
In [30]: reduce(lambda ac, v: ac + [v] if v not in ac else ac, a, [])
Out[30]: [1, 2, 3, 4]
这使用列表累加器(ac
)并检查当前值(v
)是否已在列表中;如果没有,添加新元素;如果是这样,只需返回列表。
此外,这一个完全没有价值/丑陋/被误导,更多是出于好奇(并且可以做得更好,当然):
In [11]: a = [1,2,2,3,3,3,4]
In [12]: n = [None] * len(a)
In [13]: map(lambda b, c:(lambda i=n.__setitem__:(i(c,b)))() if b not in n else None, a, range(len(a)))
Out[13]: [None, None, None, None, None, None, None]
In [14]: filter(lambda x: x, n)
Out[14]: [1, 2, 3, 4]
答案 2 :(得分:1)
Python没有有序集,但您可以使用OrderedDict
作弊。嗯,这不是纯粹的功能,但确实在紧要关头。
>>> from collections import OrderedDict
>>> from itertools import repeat
>>> x = [1,2,2,3,3,3,4]
>>> OrderedDict(zip(x, repeat(None))).keys()
[1, 2, 3, 4]
答案 3 :(得分:0)
通过功能范例使List独一无二p>
非常简单:你需要一个set-ish的实体,但也需要订购与初始列表相同的订单。
sorted(set(input), key=lambda element: input.index(element))
奖励功能:当初始数组具有重复元素时,不保证存在排序(如[1,2,2,1]
情况)。提供的代码行为与.index()
一样。此外,1次排序可能比n次查找更快(虽然需要对实际数据进行计时)。
答案 4 :(得分:-1)
try this one
list(set([1,2,2,3,3,3,4])) will definitely return [1,2,3,4]
as set contains unique elements
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> list(set([1,2,2,3,3,3,4]))
[1, 2, 3, 4]
>>>