Boyan Anakiev
Boyan Anakiev

Reputation: 111

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?

I'm trying to construct a one liner that would check if any of the values in one list are present in another list and return True or False if it does or does not.

The closest I've gotten to is the following:

[i in list1 for i in list2]

The problem with this is that it will iterate through list1 and output a list of True and Falses depending on if the items in list1 exist in list2.

What I can do is then iterate through this newly created True and False list but I can't do that in the same line. I can't use a set in this case or import any functions as I'm using this as a condition in a third party software where you can't insert sets in conditions or use functions.

Upvotes: 10

Views: 25253

Answers (3)

Víctor López
Víctor López

Reputation: 817

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.

Upvotes: 3

perigon
perigon

Reputation: 2095

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

Upvotes: 6

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476554

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.

Upvotes: 17

Related Questions