37

我想从列表中删除所有重复列表。

所以我有一个这样的列表列表。

a = [[1,2],[1,2],[3,4,5],[3,4,5],[3,4,5]]

我希望有:

b = [[1,2],[3,4,5]]

我不知道该怎么做。

4

2 回答 2

78

您可以使用一组:

b_set = set(map(tuple,a))  #need to convert the inner lists to tuples so they are hashable
b = map(list,b_set) #Now convert tuples back into lists (maybe unnecessary?)

或者,如果您更喜欢列表推导/生成器:

b_set = set(tuple(x) for x in a)
b = [ list(x) for x in b_set ]

最后,如果顺序很重要,您总是可以对 b 进行排序:

b.sort(key = lambda x: a.index(x) )
于 2012-08-30T13:52:52.260 回答
15

如果列表的顺序不重要,请参阅 mgilson 的回答。如果要保留订单,请执行以下操作:

b = list()
for sublist in a:
    if sublist not in b:
        b.append(sublist)

这将保持原始列表中的顺序。但是,它比使用集合更慢且更冗长。

于 2012-08-30T13:54:52.130 回答