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

标签 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 循环并在 xarray[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/

相关文章:

python - MongoDB 中 GB 数据的数据摄取

python - 更喜欢 libsvm (python) 中的一个类

c - 如何在不循环打印 "error"消息的情况下运行它

python - 在python中循环多个变量

python - 用单个 for 遍历嵌套列表

c - 为什么在我的代码中第二个 "for"在函数循环中只有一次

python - 添加额外的循环会导致无响应

Python3。类、继承

ios - 使用循环更新重复 UILabel 的值

python - 用于可视化循环 ETA 的进度条