繁体   English   中英

字符串比较同时包含数字和字母时如何工作?

[英]How do string comparisons work when they contain both numbers and letters?

我正在尝试比较Python中的时间,并提出了一些奇怪的比较。 我不知道以下语句如何工作:

>>> "17:30" > "16:30"
True
>>> "12:30" > "13:30"
False
>>> '18:00 - asdfj' > '16:30 - asdfj'
True

我的猜测是,它需要冒号之前的第一个数字,我不确定。

基本上,在python中,它是字典比较。

示例“ a”在“ b”之前,因此“ a” <“ b”为真。 同样,'2'<'3'。 因此,'199'<'2'是正确的,因为1在2之前。

正如其他人指出的那样,字符串之间的比较是字典顺序的问题。

在程序上意味着什么:

  • 两个字符串一次比较一个字符
  • 第一个不同的字符决定哪个字符串比另一个字符串“更大”
  • 如果没有字符不同且字符串长度相同,则它们“相等”。
  • 如果两个字符不同,则它们的“常规值”决定哪个更大
  • 一个字符比没有字符“伟大”

例如, 'ab' > 'a'True ,因为'a' == 'a' ,但是第一个字符串有一个额外的字符。 还有'abc' < 'abd'因为'c' < 'd'

'a' < 'b'因为ord('a') < ord('b') 字符的序数值通常是普通字符的ASCII值,或更确切地说,是Unicode代码点( https://docs.python.org/3/library/functions.html#ord )。 这也意味着'A' < 'a' ,因为在Unicode中大写字母位于小写字母之前。 '1' < 'A'是因为数字位于字母之前。

请注意,有时这可能会产生令人惊讶的结果(请注意Ӓ上的点):

>>> 'Ӓ' > 'a'
True
>>> 'A' > 'a'
False

有许多在线表和Unicode概述,但这是一个非常简单的示例: https : //www.tamasoft.co.jp/en/general-info/unicode.html

至于你的例子:

>>> '18:00 - asdfj' > '16:30 - asdfj'
True

这是有道理的,因为'8' > '6' 6'-字符串的其余部分无关紧要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM