簡體   English   中英

從嵌套列表中刪除元素-Python

[英]Remove elements from nested list - Python

data = [['A', 'B', 'C', 'D'],
        ['E', 'F', 'G'],
        ['I', 'J'],
        ['A', 'B', 'C', 'E', 'F']]

我想從列表中刪除不受歡迎的元素(僅出現一次)。 因此結果應如下所示:

data = [['A', 'B', 'C'],
        ['E', 'F'],
        ['A', 'B', 'C', 'E', 'F']]

我能夠使用以下代碼計算每個元素的頻率:

from collections import Counter
Counter(x for sublist in data for x in sublist)

#output
Counter({'A': 2, 'C': 2, 'B': 2, 'E': 2, 'F': 2, 'D': 1, 'G': 1, 'I': 1, 'J': 1})

但是,我不確定如何使用此計數信息從列表中刪除不受歡迎的元素。 有什么幫助嗎?

根據頻率信息生成新列表。

以下代碼使用嵌套列表理解來做到這一點:

from collections import Counter
freq = Counter(x for sublist in data for x in sublist)
data = [[x for x in row if freq[x] > 1] for row in data]  # Remove non-popular item
data = [row for row in data if row]  # Remove empty rows

# data => [['A', 'B', 'C'], ['E', 'F'], ['A', 'B', 'C', 'E', 'F']]

復雜度相似。 只需使用map和filter函數使代碼更具pythonic即可。

from collections import Counter
data = [['A', 'B', 'C', 'D'],
       ['E', 'F', 'G'],
       ['I', 'J'],
       ['A', 'B', 'C', 'E', 'F']]
counter = Counter({'A': 2, 'C': 2, 'B': 2, 'E': 2, 'F': 2, 'D': 1, 'G': 1, 'I': 1, 'J': 1})


result = map(lambda row: filter(lambda x: counter.get(x) > 1, row), data)
print result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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