簡體   English   中英

如何從兩個列表中刪除通用元素?

[英]How do I remove common elements from two lists?

我有兩個列表,例如下面的示例(實際上, a更長),並且我想刪除所有常見的元素,在這種情況下,列表punctuation給出的punctuation

a = [['A', 'man,', 'view,', 'becomes', 'mankind', ';', 'mankind', 'member', 'comical', 'family', 'Intelligences', '.'],['Jeans', 'lengthen', 'legs', ',', 'hug', 'hips', ',', 'turn', 'heads', '.']]
punctuation = ['(', ')', '?', ':', ';', ',', '.', '!', '/', '"', "'"]

如果需要保留訂單,請逐個單詞逐項刪除和測試收容措施。

cleaned = [word for word in words if word not in blacklist] 

當順序不重要時:

您可以對其執行set()操作,但首先必須展平嵌套列表a (取自Python中的列表列表中的制作平面列表 ):

b = [item for sublist in a for item in sublist]
cleaned = list(set(b) - set(punctuation))

cleaned的列表看起來像['A', 'hug', 'heads', 'family', 'Intelligences', 'becomes', 'Jeans', 'lengthen', 'member', 'turn', 'mankind', 'view,', 'legs', 'man,', 'hips', 'comical']

當順序很重要時:

只是列表理解,這可能會更慢

cleaned = [x for x in b if x not in punctuation]

cleaned外觀看起來像['A', 'man,', 'view,', 'becomes', 'mankind', 'mankind', 'member', 'comical', 'family', 'Intelligences', 'Jeans', 'lengthen', 'legs', 'hug', 'hips', 'turn', 'heads']

您可以執行此操作,但是列表順序可能會更改。

[list(set(sublist)-set(punctuation)) for sublist in a]

使用集合,您可以刪除標點符號條目,然后將結果再次轉換為列表。 使用列表推導對列表中的每個子列表執行此操作。


如果保持順序很重要,則可以執行以下操作:

[[x for x in sublist if not (x in punctuation)] for sublist in a]

你可以做:

>>> from itertools import chain
>>> filter(lambda e: e not in punctuation, chain(*a))
['A', 'man,', 'view,', 'becomes', 'mankind', 'mankind', 'member', 'comical', 'family', 'Intelligences', 'Jeans', 'lengthen', 'legs', 'hug', 'hips', 'turn', 'heads']

或者,如果要維護子列表結構:

>>> [filter(lambda e: e not in punctuation, sub) for sub in a]
[['A', 'man,', 'view,', 'becomes', 'mankind', 'mankind', 'member', 'comical', 'family', 'Intelligences'], ['Jeans', 'lengthen', 'legs', 'hug', 'hips', 'turn', 'heads']]

暫無
暫無

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

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