Python删除相等列表

时间:2017-07-17 18:07:24

标签: python python-2.7 python-3.x

我的列表中有一些相同的列表a:

a = [[a],[a],[b],[b],[c],[c]]

如何删除相等的列表,以便我有以下内容:

a = [[a],[b],[c]]

我尝试用套装做但但它不起作用:

my_set = set()
for elem in a:
    my_set.add(elem)
for x in my_set:
    print(x)

6 个答案:

答案 0 :(得分:5)

你可以试试这个:

a = [['a'],['a'],['b'],['b'],['c'],['c']]
b = list()
for item in a:
    if item not in b:
        b.append(item)

答案 1 :(得分:3)

numpy是其中一个选项

import numpy as np
a = [['a'],['a'],['b'],['b'],['c'],['c']] 
np.unique(a).tolist() #  ['a', 'b', 'c']

答案 2 :(得分:2)

如果您不介意使用itertools

[x for x,_ in itertools.groupby(sorted(a))]
#[['a'], ['b'], ['c']]

如果这样做,请将列表转换为元组,创建一组,然后转换回列表:

list(map(list, set(map(tuple, a))))
#[['b'], ['c'], ['a']]

答案 3 :(得分:0)

@DYZ答案的变体,适用于包含相同元素的列表,无论顺序如何:

[x for x,_ in itertools.groupby(map(set, a))]

例如:

>>> a = [['a'],['a'],['b'],['b'],['c', 'a'],['a', 'c']]
>>> [list(x) for x,_ in itertools.groupby(map(set, a))]
[['a'], ['b'], ['a', 'c']]

如果['c', 'a']['a', 'c']不相同(请参阅@DYZ下面的评论),那么您可以使用set()执行以下操作:

map(list, set(map(tuple, a)))

答案 4 :(得分:0)

如果['c', 'a']['a', 'c']不相等,那么您可以使用set()执行以下操作:

map(list, set(map(tuple, a)))

答案 5 :(得分:0)

您可以改用列表理解。

d = [it for i, it in enumerate(a) if it not in a[0:i]]
print(d)