Delete items in one list present in another list

I have list1 and list2 . list2 is a group of words that need to be removed from list1 , for example:

 list1=['paste', 'text', 'text', 'here', 'here', 'here', 'my', 'i', 'i', 'me', 'me'] list2=["i","me"] 

Required Conclusion:

 list3=['paste', 'text', 'text', 'here', 'here', 'here', 'my'] 

I tried different versions using 'for', but so far no results.

Any ideas would be appreciated!

+6
source share
2 answers

Use list comprehension :

 >>> list1 = ['paste', 'text', 'text', 'here', 'here', 'here', 'my', 'i', 'i', 'me', 'me'] >>> list2 = ["i","me"] >>> list3 = [item for item in list1 if item not in list2] >>> list3 ['paste', 'text', 'text', 'here', 'here', 'here', 'my'] 

NOTE. Search in lists O(n) , consider instead of set from list2 - search in sets O(1) .

+14
source

How about using an arithmetic set?

 diff = set(list1) - set(list2) result = [o for o in list1 if o in diff] 

Or even better (more efficient):

 set2 = set(list2) result = [o for o in list1 if o not in set2] 
+5
source

Source: https://habr.com/ru/post/950585/


All Articles