Python:删除列表中包含重复元素的列表

时间:2017-09-29 03:38:18

标签: python list

我有一份清单如下:

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

如何删除此列表中包含重复元素[1, 1]

的列表

2 个答案:

答案 0 :(得分:1)

对于这个具体案例:

[i for i in seq if i[0] != i[-1]]

更一般地说,删除所有项目相同的子列表(kudos @ A-B-B 8'评论):

[i for i in seq if len(set(i)) > 1]

最后,如果在子列表中找到任何重复,例如[..., [1, 2, 2]]

import collections as ct

[i for i in seq if i and all(v == 1 for v in ct.Counter(i).values())]

使用最终解决方案进行测试:

def drop_replicates(seq):
    return [i for i in seq if i and all(v == 1 for v in ct.Counter(i).values())]


assert drop_replicates([[2, 5], [1, 1], [2, 4]]) == [[2, 5], [2, 4]]
assert drop_replicates([[2, 5], [1, 1], [2, 4], [1, 2, 2]]) == [[2, 5], [2, 4]]
assert drop_replicates([[2, 5], [1, 1], [2, 4], [1, 2, 2], []]) == [[2, 5], [2, 4]]

答案 1 :(得分:0)

set(i)将列表转换为集合。集是无重复的无序列表(与数学集相同)。以下是一个更通用的解决方案,它应该与子列表中的任意数量的元素一起使用。

[i for i in seq if len(set(i)) == len(i)]