carlpett
carlpett

Reputation: 12583

Numpy.Array in Python list?

I've got a list (used as a stack) of numpy arrays. Now I want to check if an array is already in the list. Had it been tuples for instance, I would simply have written something equivalent to (1,1) in [(1,1),(2,2)]. However, this does not work for numpy arrays; np.array([1,1]) in [np.array([1,1]), np.array([2,2])] is an error (ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()). The error message does not help here AFAIK, as it is referring to comparing arrays directly.

I have a hard time beliving it wouldn't be possible, but I suppose there's something I'm missing.

Upvotes: 18

Views: 17421

Answers (5)

aprospero
aprospero

Reputation: 539

You can convert the array into a list by using tolist() and then do the check:

my_list = [[1,1], [2,2]]

print(np.array([1,1]).tolist() in my_list)
print(np.array([1,2]).tolist() in my_list)

Upvotes: -1

Mahdi Ghelichi
Mahdi Ghelichi

Reputation: 1160

What about this:

a = array([1, 1])

l = [np.array([1,1]), np.array([2,2])]
list(map(lambda x: np.array_equal(x, a), l)

[True, False]

Upvotes: 0

andrenarchy
andrenarchy

Reputation: 458

Sven's answer is the right choice if you want to compare the actual content of the arrays. If you only want to check if the same instance is contained in the list you can use

any(a is x for x in mylist)

One benefit is that this will work for all kinds of objects.

Upvotes: 2

Paul
Paul

Reputation: 43620

If you are looking for the exact same instance of an array in the stack regardless of whether the data is the same, then you need to this:

id(a) in map(id, my_list)

Upvotes: 2

Sven Marnach
Sven Marnach

Reputation: 601779

To test if an array equal to a is contained in the list my_list, use

any((a == x).all() for x in my_list)

Upvotes: 29

Related Questions