【问题标题】:how to understand `3<range(3)` in python如何理解python中的`3<range(3)`
【发布时间】:2014-10-21 09:50:08
【问题描述】:

我不确定在哪里可以找到解释以下内容的参考

>>> 3<range(3)
True
>>> [1,2]<range(3)
False
>>> [1]<range(3)
False
>>> [4]<range(3)
False
>>> [4,1,2,3]<range(3)
False

谢谢!

【问题讨论】:

  • @MartijnPieters,是否每个元素都没有在相应的索引处进行评估?
  • @PadraicCunningham: range() 生成一个列表,以0 开头。
  • @PadraicCunningham:对于列表是的,但是当类型不同时,它们按类型名称排序
  • @brainstorm:我暂时忽略了range() 也会生成一个列表,但它以0 开头。所以第二个测试等价于[1, 2] &lt; [0, 1, 2],列表按字典顺序排列。
  • @MartijnPieters。这就是我要问的,如果最后一个示例将第三个元素更改为 1,结果将是 True

标签: python comparison


【解决方案1】:

在 Python 2 中,range() 生成一个列表对象。第一个测试比较了两种不同的类型,此时numbers always come before other types:

>>> range(3)
[0, 1, 2]
>>> 3 < []
True

剩下的只是将列表与[0, 1, 2] 进行比较;列表按字典顺序进行比较,0 低于所有其他测试中的任何第一个值。

你的初始值应该小于0:

>>> [-1] < range(3)
True

或者,如果相等,下一个值应该小于1:

>>> [0, 0] < range(3)
True

等等

查看表达式文档的Comparisons section:

元组和列表使用对应元素的比较来按字典顺序进行比较。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同的类型并且具有相同的长度。

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多