[英]Python: Removing list with repeated elements in a list of lists
我有一個列表列表如下:
seq = [[2, 5], [1, 4], [1, 2], [3, 4], [1, 5], [2, 3], [3, 5], [1, 1], [2, 4], [1, 3]]
如何刪除此列表中具有重復元素的列表,即[1, 1]
?
對於此特定情況:
[i for i in seq if i[0] != i[-1]]
更一般地,刪除所有項目都等效的子列表(榮譽@ABB 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]]
set(i)
將列表轉換為集合。 集合是沒有重復的無序列表(與數學集合相同)。 以下是一個更通用的解決方案,它應該適用於子列表中的任意數量的元素。
[i for i in seq if len(set(i)) == len(i)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.