+ 3

[solved](python)Shortcut to express list1-list2 ?

I have 2 lists: list1 = [1,2,3,4] list2 = [3,4] If I want to prevent the numbers in list2 to be shown in list1, is there a shortcut for that? Or I have to write long code like below: list1 = [1, 2, 3, 4] list2 = [3, 4] temp_list = [] i = 0 while i < len(list1): if list1[i] not in list2: temp_list.append(list1[i]) i += 1 list1 = temp_list print(list1)

9th Nov 2021, 11:30 AM
Lea
Lea - avatar
19 ответов
+ 16
[i for i in list1 if i not in list2] https://code.sololearn.com/cbn7mwGiujgk/?ref=app
9th Nov 2021, 11:33 AM
Hatsy Rei
Hatsy Rei - avatar
+ 10
[edited] sorry, the lists sequence in the lambda was wrong. here the correct version: list1 = [1, 2, 3, 4] list2 = [3, 4] print(list(filter(lambda x:x not in list2, list1))) Lea , just for the sake of completeness: using filter with a lambda function can also do this job: list1 = [1, 2, 3, 4] list2 = [3, 4] print(list(filter(lambda x:x not in list1, list2))) # not correct!
9th Nov 2021, 7:00 PM
Lothar
Lothar - avatar
+ 7
print(list(set(list1) - set(list2)))
9th Nov 2021, 11:34 AM
Simba
Simba - avatar
+ 7
Lea oh no, Converting lists into sets has some pitfalls. Just add a 2nd element 1 to list1. It will disappear after converting to set. Simba s solution is cool.Hatsy Rei s solution is safe.
9th Nov 2021, 11:49 AM
Oma Falk
Oma Falk - avatar
+ 5
the modules name to import is 'collections' not 'collection' ^
12th Nov 2021, 4:44 PM
Lothar
Lothar - avatar
+ 4
Hatsy Rei Simba Both codes works! Thank you!
9th Nov 2021, 11:39 AM
Lea
Lea - avatar
+ 4
Oma Falk I just tried! You are right! Thank you for pointing it out! https://code.sololearn.com/cGX90sT9QgaI/?ref=app
9th Nov 2021, 12:01 PM
Lea
Lea - avatar
+ 4
Prabhas Koya Thank you for providing more solutions! By the way, Is “collection” a moduler i need to add to my library before I run the code?
11th Nov 2021, 11:14 PM
Lea
Lea - avatar
+ 3
Simba This is so cool! It means I can apply all the mathematical operations for sets on lists!
9th Nov 2021, 11:43 AM
Lea
Lea - avatar
+ 3
I wonder why lists don’t have mathematical opertations like sets. Sets and lists, it seems both of them are for holding data, but their methods are so different…..
9th Nov 2021, 12:07 PM
Lea
Lea - avatar
+ 3
for i in list2: try: list1.remove(i) except: pass ''' Looping only through list2, I think this is efficient. Hatsy Rei is looping through extra items in list1 . IF YOU KNOW YOUR LIST2 CONTAINS ELEMENTS WHICH ARE DEFINITELY IN LIST1 , THEN SIMPLY for i in list2: list1.remove(i) ''' making more faster import collections list1 = collections.deque([1,1,2,3]) list2 = [3,4] for i in list2: try: list1.remove(i) except: pass
11th Nov 2021, 7:37 AM
Prabhas Koya
+ 2
☺️
9th Nov 2021, 1:04 PM
Lea
Lea - avatar
+ 2
Hi, Lothar I ran you code and get the result below: []
10th Nov 2021, 12:23 AM
Lea
Lea - avatar
+ 2
Yes , you need to import before running your code.
12th Nov 2021, 3:52 AM
Prabhas Koya
+ 1
Here it goes list1 = [1, 1, 2, 3, 4]; list2 = [3, 4] list0 = list(set(list1 + list2)); print(list0)
10th Nov 2021, 9:51 AM
Pee Frosh
Pee Frosh - avatar
11th Nov 2021, 3:09 AM
Ally Ahmed
Ally Ahmed - avatar
+ 1
Lothar yeah that was a typo thanks for correcting
13th Nov 2021, 4:15 AM
Prabhas Koya
0
I need your help guys to improve my code
11th Nov 2021, 3:09 AM
Ally Ahmed
Ally Ahmed - avatar