问题描述
这可能很难解释。
我想指定两个索引,然后运行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
时打印出消息。
for x in array:
if x == array[0][0]:
print "%s is the object you're looking for." % x
现在,为什么需要它来确保它与内存中的对象完全相同是因为,这将循环遍历第一个列表中的以下三个1,并返回消息,因为它们的值与第一个1相同。我不需要这个。 我只需要匹配内存中的实际点,而不是值。
1楼
我认为您要问的是如何测试对象标识而不是对象相等性 。
在Python中,您可以使用执行此 ,即
if x is y:
而不是:
if x == y:
但是,您会遇到int和字符串问题,因为Python运行时会自动重新使用它从池中为这些对象创建的对象:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> id(a),id(b)
(13561552, 13561552)
我认为短字符串会以这种方式自动“插入”,并且您可以使用强制较长的字符串:
>>> 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__
方法,即编写基于对象相等性而不是基于身份的代码。
2楼
实际上,x不是内部元组元素,而是整个内部元组。
如果我对您的理解很好,那么您希望在index
元素与array[container][index]
相同的地方打印整个元组,如下所示:
for subtuple in array: if subtuple[index] is array[container][index]: print "%s is the object you're looking for." % subtuple
[1, 1, 1, 1] is the object you're looking for.
1,1,1,1 [1, 1, 1, 1] is the object you're looking for.
3楼
a)这些是列表,不是元组和数组
b) for x in array:
遍历列表“ array”,例如x是[1,1,1,1],然后是[2,2,2,2],...,并且这些不在数组array [container] [index]的位置很清楚,不是吗? (要挑剔,他们可能会在那儿,因为列表可以包含自身,但我认为那不是您想要的)。
您到底想做什么?
4楼
我不明白您要做什么:
for x in array:
中的x
for x in array:
意味着x
首先将是[1,1,1,1]
然后是[2,2,2,2]
,依此类推。
另一方面, array[container][index]
只能是1
...它们怎么可能相等?
不管怎么说,使用is
用数字是没有意义的开始。
也许您应该问真正的问题...?