【问题标题】:Python inequality operators; comparing lists [duplicate]Python 不等式运算符;比较列表[重复]
【发布时间】:2015-06-21 11:47:13
【问题描述】:

在使用不等式运算符比较列表时难以理解 Python 行为。这是一个使用 python3 命令行解释器的 sn-p:

>>> [8] < [7]
False
>>> [8] < [9]
True
>>> [8, 6] < [9]
True
>>> [8, 6] < [9, 7]     
True                    # So far so good
>>> [8, 6] < [9, 5]     
True                    # Huh?

所以,很明显 Python 不仅仅是在并行索引中移动。我确实找到了一些信息,表明在这种情况下,Python 按“字典顺序”对列表进行排序,我猜这意味着按字母顺序。

所以,我认为列表可能会被排序,然后通过并行比较,但以下示例证明了这一点:

>>> [1, 2, 3] < [3, 2, 1]
True

我的猜测是内部比较会是 [1, 2, 3]

感谢任何帮助。

【问题讨论】:

  • 在按字母顺序排列的列表中 '86'

标签: python inequalities


【解决方案1】:

Python 所做的只是并行遍历列表并比较相同索引的元素。第一次遇到不相等的元素时,返回这个结果。

同理,比较词:

"Peter" > "Peer"

前两个字母相同,第三个不同,给出结果。这(对于列表)与纸质词典中使用的技术相同,只是使用列表元素而不是字符。

附加信息: (正如 Padraic Cunningham 所建议的那样):当一个列表较短并且所有元素的大小与较短列表的大小相同时,较长的列表被认为更大。这也与普通(纸质)词典相同。

【讨论】:

  • 如果所有元素都等于较短列表的长度,则认为较长的列表更大
  • 谢谢,已添加此信息
【解决方案2】:

很明显,Python 不仅仅是在并行索引中移动

是的,它会在第一次发现不相等的值时停止。这确实是字典顺序。用字母替换示例中的数字,用字符串替换列表:

"h" < "g" # False
"h" < "i" # True
"hf" < "i" # True
"hf" < "ig" # True
"hf" < "ie" # True - not huh, hf does come before ie alphabetically.
"abc" < "cba" # True

【讨论】:

    【解决方案3】:

    其实很有道理。

    比较的方式与按字典顺序对单词进行排序类似。毕竟,单词也是列表:字符列表。

    您首先考虑第一项。如果一个较小,则整个序列较小,如果它们相等,则移至第二个,依此类推。

    显然,“86”在“95”之前,就像“az”在“bc”之前,“100”在“90”之前一样。

    更多here.

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多