我有一份清单如下:
seq = [[2, 5], [1, 4], [1, 2], [3, 4], [1, 5], [2, 3], [3, 5], [1, 1], [2, 4], [1, 3]]
如何删除此列表中包含重复元素[1, 1]
?
答案 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)]