如何在python中检测自引用列表

Tan*_*Sah 8 python python-3.x

我一直试图在列表中找到一个自引用循环.我像这样引用了这个列表:

a = [1, 2, None] 
a[2] = a
Run Code Online (Sandbox Code Playgroud)

在python中检测这个循环的正确方法是什么?

Mad*_*ist 7

我不确定是否有"正确"的方式,但is运营商是你的朋友.要检查列表是否包含自身:

any(x is a for x in a)
Run Code Online (Sandbox Code Playgroud)

要查找列表的索引:

next(i for i, x in enumerate(a) if x is a)
Run Code Online (Sandbox Code Playgroud)

这个版本就像a.index是因为如果找不到列表就会引发错误.要进行模拟a.find,请将默认值添加到next:

next(..., -1)
Run Code Online (Sandbox Code Playgroud)

你不能直接使用a.find或者a.index因为那些将通过相等来搜索,在这种情况下,它将在正匹配上无限递归.

在这种情况下,检查身份应该是相对万无一失的.