【问题标题】:When does list[n] == list什么时候 list[n] == list
【发布时间】:2020-07-31 12:00:21
【问题描述】:

我在阅读一些代码时遇到了一行代码 if len(list)==1 and list[0] == list:,其中 list 是所有数字的列表。我在阅读代码时假设一个元素列表等于那个元素,但是当我尝试[0] == 0 时,它返回了False。那么“if”语句是什么意思呢?

【问题讨论】:

  • a = []; a.append(a)?
  • 非常好的 tobias——也是一个自定义类,子类列表和重新定义__eq__
  • 不适用于lists,但对于 Python str,这将发生在长度为 1 的字符串中; 'a'[0] == 'a'。鉴于名称是list,这可能不适用,但我想我会提到它,以防将来它确实适用于某人。

标签: python list python-2.7


【解决方案1】:

列表可以包含对自身的引用:

>>> lst = []
>>> lst.append(lst)
>>> print(lst)
[[...]]
>>> lst[0] == lst
True

当然,其他容器类型也是如此,但并不容易,例如set 不能包含另一个 set(至少不能直接),tuplefrozenset 不允许在创建元素后添加元素(同样,至少不能直接)。

【讨论】:

  • 这不是 OP 的问题,但什么时候有用?
  • 虽然这回答了我最初的问题,但在进一步查看源代码后,我可以确认该列表不包含任何自我引用(仅数字)
  • @jakub 也许您正在使用列表来形成有向循环图,尽管肯定有更好的方法来做到这一点。
  • @nii75435eoopy 不知道,我会说这是代码中的错误,实际上永远不需要or 的条件权。
  • @tobias_k 是的,就是这样。
【解决方案2】:

没有实际需要,但是...

class MyList(list):
    def __eq__(self, other):
        return True

list = MyList([1,2])
print(list)
print(list[0] == list)

输出:

[1, 2]
True

【讨论】:

  • 我想虽然这在技术上可行,但我问的是基本列表而不是子类
  • @nii75435eoopy 向我们展示您阅读原始代码的上下文
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多