Reputation: 151
I have been trying to find a self-referencing loop in a list. I have referenced the list like this:
a = [1, 2, None]
a[2] = a
What is the right way to detect this loop in python?
Upvotes: 8
Views: 212
Reputation: 114320
I'm not sure if there's a "right" way, but the is
operator is your friend. To check if the list contains itself:
any(x is a for x in a)
To find the index of the list:
next(i for i, x in enumerate(a) if x is a)
This version is like a.index
in that it raises an error if the list is not found in itself. To simulate a.find
instead, add a default value to next
:
next(..., -1)
You can't use a.find
or a.index
directly because those will search by equality, which will be infinitely recursive on a positive match in this case.
Checking for identity should be relatively foolproof in this case.
Upvotes: 7