这可能很难解释。我想指定两个索引,然后运行for循环。如果在循环中检查的当前x
是在两个索引的位置指定的完全相同的项,那么它应该返回一条消息。
array = [ [1,1,1,1], [2,2,2,2], [3,3,3,3], [4,4,4,4] ]
再次,这是我的阵列。我希望它通过for循环并在x
是1
的{{1}}内存时打印出来的消息,即array[0][0]
,即同一块内存。
for x in array:
if x == array[0][0]:
print "%s is the object you're looking for." % x
现在,为什么我需要它以确保它与内存中的完全相同的对象是因为,这将循环通过第一个列表中的以下三个1,并返回消息,因为它们具有相同的价值作为第一个1.我不需要这个。我只需要匹配内存中的实际点,而不是值。
答案 0 :(得分: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__
方法,即根据对象的相等性而不是标识来编写代码。
答案 1 :(得分:0)
实际上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.
答案 2 :(得分:0)
a)这些是列表,而不是元组而不是数组
b)中
for x in array:
通过列表“数组”,例如x是[1,1,1,1],然后是[2,2,2,2],...... 并且这些不在位置数组[容器] [索引]很清楚,不是吗? (为了挑剔,它们有可能在那里,因为列表可以包含自己,但我认为这不是你想要的。)
你想做什么?
答案 3 :(得分:0)
我没有得到你想要做的事情:
for x in array:
表示x
首先为[1,1,1,1]
,然后为[2,2,2,2]
,依此类推。
另一方面,array[container][index]
只能是1
......他们怎么能够平等?
无论如何,将is
与数字一起使用是没有意义的。也许你应该问一下真正的问题......?