4

Python 中有没有办法通过功能范式使 List 独一无二?

输入 :[1,2,2,3,3,3,4]

输出:([1,2,3,4]以保持顺序的方式)

我知道还有其他方法,但没有一种方法是功能性的。

4

5 回答 5

8

如果您只需要删除相邻的匹配项,请尝试以下操作:

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,[])
于 2012-12-07T06:21:24.037 回答
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]
于 2012-12-07T06:31:05.350 回答
2

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]
于 2012-12-07T06:34:23.363 回答
0

通过功能范式使列表独一无二

非常简单:您需要一个实体,它是一个集合,但也按照与初始列表中相同的顺序进行排序。

sorted(set(input), key=lambda element: input.index(element))

额外功能:当初始数组具有重复元素时,不保证存在排序([1,2,2,1]以防万一)。提供的代码的行为与此相同.index()。此外,1 次排序可能比 n 次查找更快(尽管需要对实际数据进行计时)。

于 2016-06-21T14:21:29.053 回答
-2
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]
>>>
于 2012-12-07T06:20:53.490 回答