检查for循环变量是否驻留在列表的两个索引处

时间:2011-03-09 15:31:41

标签: python loops for-loop indexing match

这可能很难解释。我想指定两个索引,然后运行for循环。如果在循环中检查的当前x是在两个索引的位置指定的完全相同的项,那么它应该返回一条消息。

array = [ [1,1,1,1], [2,2,2,2], [3,3,3,3], [4,4,4,4] ]

再次,这是我的阵列。我希望它通过for循环并在x1的{​​{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.我需要这个。我只需要匹配内存中的实际点,而不是值。

4 个答案:

答案 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与数字一起使用是没有意义的。也许你应该问一下真正的问题......?