这可能很难解释。我想指定两个索引,然后运行 for 循环。如果循环中当前检查的x
与两个索引位置指定的完全相同,那么它应该返回一条消息。
array = [ [1,1,1,1], [2,2,2,2], [3,3,3,3], [4,4,4,4] ]
这又是我的数组。我希望它通过 for 循环并在 x
是 array[0][0]
内存中的 1
时打印消息,又名同一 block 内存。
for x in array:
if x == array[0][0]:
print "%s is the object you're looking for." % x
现在,为什么我需要它来确保它是内存中相同的对象,因为这将循环第一个列表中的以下三个 1,并返回消息,因为它们具有相同的 value 作为第一个 1。我不需要需要这个。我只需要匹配内存中的实际点,而不是值。
最佳答案
我认为您要问的是如何测试对象身份而不是对象平等。
在 Python 中,您可以使用 is
operator 来执行此操作,即
if x is y:
而不是:
if x == y:
但是,您会遇到整数和字符串问题,因为 Python 运行时会自动重用它从池中为这些对象创建的对象:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> id(a),id(b)
(13561552, 13561552)
我认为短字符串会以这种方式自动“驻留”,您可以强制较长的字符串使用 intern()
function :
>>> c = 'Long string'
>>> d = 'Long string'
>>> c is d
False
>>> c = intern(c)
>>> d = intern(d)
>>> c is d
True
但是,似乎 long
类型并未被保留,因此您可以使用它:
>>> a = 1L
>>> b = 1L
>>> a is b
False
但是,内置类型的对象标识取决于 Python 的实现,而不是语言本身,因此您不应该依赖任何一种方式。我认为你最好创建自己的对象类并为它们编写适当的 __eq__ 方法,即编写基于对象相等而不是身份的代码。
关于python - 检查 for 循环变量是否驻留在列表的两个索引处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248057/