当前位置: 代码迷 >> python >> 检查for循环变量是否位于列表的两个索引处
  详细解决方案

检查for循环变量是否位于列表的两个索引处

热度:82   发布时间:2023-06-27 21:49:24.0

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

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

再次,这是我的数组。 我希望它经过for循环并在xarray[0][0]的内存(即同一块内存)中的1时打印出消息。

for x in array:
    if x == array[0][0]:
        print "%s is the object you're looking for." % x

现在,为什么需要它来确保它与内存中的对象完全相同是因为,这将循环遍历第一个列表中的以下三个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__方法,即编写基于对象相等性而不是基于身份的代码。

实际上,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.

a)这些是列表,不是元组和数组

b) for x in array:

遍历列表“ array”,例如x是[1,1,1,1],然后是[2,2,2,2],...,并且这些不在数组array [container] [index]的位置很清楚,不是吗? (要挑剔,他们可能会在那儿,因为列表可以包含自身,但我认为那不是您想要的)。

您到底想做什么?

我不明白您要做什么:

for x in array:中的x for x in array:意味着x首先将是[1,1,1,1]然后是[2,2,2,2] ,依此类推。 另一方面, array[container][index]只能是1 ...它们怎么可能相等?

不管怎么说,使用is用数字是没有意义的开始。 也许您应该问真正的问题...?

  相关解决方案