簡體   English   中英

如何比較兩個列表並刪除 python 中的元素

[英]How to compare two lists and remove elements in python

我有兩個清單。 我正在嘗試刪除在第二個列表中的任何元素之前發生的第一個列表中的所有元素。 這應該只發生一次。 舉個例子:讓,

list1 = ['a','d','k','1','3','a','f','3']
list2=['1','2','3','4','5']

我的結果列表應該是什么:

listResult=['1','3','a','f','3']

在列表 1 中,在列表 2 中找到元素“1”。 因此,必須刪除“1”之前的所有項目。 這不應該發生在元素“3”上,因為移除過程必須在一次移除后中斷。

我嘗試過以下方法,但它只考慮一個給定的特定元素。 我正在嘗試的不僅是考慮一個元素,還要考慮一個元素列表。

from itertools import dropwhile

list1 = ['a','d','k','1','3','a','f','3']
element = '1'

list(dropwhile(lambda x: x != element, list1))

在 lambda 中應使用in運算符進行遏制測試:

>>> list(dropwhile(lambda x, s=frozenset(list2): x not in s, list1))
['1', '3', 'a', 'f', '3']

另一個有趣但效率略低的解決方案:

>>> from itertools import compress, accumulate
>>> from operator import or_
>>> s = set(list2)
>>> list(compress(list1, accumulate((x in s for x in list1), or_)))
['1', '3', 'a', 'f', '3']

因為accumulate第二個參數的默認值相當於operator.add ,在Python中總是將正數視為真,所以or_可以省略:

>>> list(compress(list1, accumulate(x in s for x in list1)))
['1', '3', 'a', 'f', '3']

我們可以使用 list1 創建一個set ,該集合可用於檢查list2中的項目是否存在於list1中。
如果它存在,我們可以獲取項目的索引並從項目索引中獲取子數組。 然后我們可以打破循環。

list1 = ['a','d','k','1','3','a','f','3']
list2 = ['1','2','3','4','5']
listResult = []

set1 = set(list1)
for i in list2:
    if (i in set1):
        idx = list1.index(i)
        listResult = list1[idx:]
        break

print(listResult)

暫無
暫無

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

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