簡體   English   中英

Python:刪除列表列表中具有重復元素的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM