Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—如何知道项目是否引用列表的指定元素_Python_List - Fatal编程技术网

Python—如何知道项目是否引用列表的指定元素

Python—如何知道项目是否引用列表的指定元素,python,list,Python,List,我有两个列表A=[1,1,1]和B=[1],它们都包含元素1 如果无意中发现任何1,是否有办法知道该1是否引用了B中的第0个元素,例如: a = A[0] b = B[0] # <-- This is refering to B at index 0 print(a is B[0], id(a) == id(B[0])) # this should return false print(b is B[0], id(b) == id(B[0])) # this should return

我有两个列表
A=[1,1,1]
B=[1]
,它们都包含元素1

如果无意中发现任何
1
,是否有办法知道该
1
是否引用了
B
中的第0个元素,例如:

a = A[0]
b = B[0] # <-- This is refering to B at index 0

print(a is B[0], id(a) == id(B[0])) # this should return false
print(b is B[0], id(b) == id(B[0])) # this should return true
print(1 is B[0]) # this should also return false

我想特别知道的是,某个东西是否引用了列表的某个元素,换句话说,在上面的示例中,该函数只在第二种情况下返回True。

在您的示例中,当变量指向同一个对象时,它将始终是
True
。 如果您必须区分两个“相等”的整数,您可以做的是为其实现一个包装器类。默认情况下,类实例的标识将不同,比较将失败

例如:

class CustomInt:
    def __init__(self, number):
        self.number = number
    def __repr__(self):
        return self.number
    
    
a = CustomInt(1)
b = CustomInt(1)
print(a==b)
--> False
```

您所拥有的将起作用,
b是b[0]
但是,
a是b
,因为它们是同一个对象,这是CPython(小整数被缓存)的一个实现细节。这听起来像是一个X-Y问题,您实际上想解决什么?
a
的值为1,但不是
b
的第0个元素,相反,
a
是第0个元素
a
。我试图让部分
a=a[0]
返回它是a的第0个元素,而部分
b=b[0]
返回它是BYou的第0个元素是错误的
a
a
B
的第0个元素。这就是
告诉你的。正如我所解释的,在任何给定的CPython进程中,只有一个值为1的
int
对象。但再说一次,你为什么在乎?你真正想解决的是什么?好吧,散列在这里是不相关的,它是
\uuuuueq\uuuu
matters@juanpa.arrivillaga是,但如果没有重载,
\uuuuuu eq\uuuuu
使用
\uuuuuuu散列\uuuuuu
属性进行比较我不知道为什么会使用
\uuuuuuuu散列\uuuuu
。它可能只是通过标识进行比较,使用的是
is
(等效的内部CPython函数,它只是一个指针等式)。在任何情况下,我认为这可能是一个解决方案,但我怀疑OP可以完全绕过这样做的需要。是的,这也是我脑海中的第一个猜测解决方案。但正如@juanpa.arrivillaga所说,这可能是一个XY问题。@FloLie是的,我知道它是
res=(v==w)?Py_True:Py_False
其中
v
w
是PyObject指针,所以它只是硬编码而已!
class CustomInt:
    def __init__(self, number):
        self.number = number
    def __repr__(self):
        return self.number
    
    
a = CustomInt(1)
b = CustomInt(1)
print(a==b)
--> False
```