The Python Oracle

How to check if a value in one list is in another list with a one-liner for an if statement in Python if I'm not using sets?

Become part of the top 3% of the developers by applying to Toptal https://topt.al/25cXVn

--

Music by Eric Matyas
https://www.soundimage.org
Track title: Thinking It Over

--

Chapters
00:00 Question
00:58 Accepted answer (Score 17)
01:28 Answer 2 (Score 6)
02:11 Answer 3 (Score 3)
02:50 Thank you

--

Full question
https://stackoverflow.com/questions/4509...

Answer 1 links:
https://wiki.python.org/moin/TimeComplex...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #python27 #list

#avk47



ACCEPTED ANSWER

Score 17


You can us an any(..) builtin function with a generator expression:

any(e in list2 for e in list1)

So this will check if there is at least one element that occurs in both lists.

Note however that this will result in a worst-case O(n2) algorithm. If the elements are hashable for instance, and you can use a set, we can make it an O(n) average-case algorithm.




ANSWER 2

Score 6


You could also do

set(list1).intersection(list2)

to get the set of elements that occur in both; the length of the set is 0 if there's no intersection, otherwise positive. You can treat this set as a boolean, since Python evaluates empty sets to False and nonempty sets to True.

if set(list1).intersection(list2):
    print ('Lists have elements in common')
else: 
    print ('No elements in common')

Runtime is O(n) average-case, O(n^2) worst-case: https://wiki.python.org/moin/TimeComplexity




ANSWER 3

Score 3


Supose we have this lists:

list1 = ['bar', 'foo', 'qwerty', 9, 1]
list2 = [1, 2, 3, 'foo']

If we want to see the repeated values:

[i for i in list1 if i in list2]

The input:

['foo', 1]

If we want True false:

(map(lambda each: each in list1, list2))

The input:

[True, False, False, True]

The input is checking list2, the first value '1' exists in list1 and the last 'foo' too.