Python 使用的字符串比较技术 [英] String comparison technique used by Python

查看:20
本文介绍了Python 使用的字符串比较技术的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道 Python 如何进行字符串比较,更具体地说,当小于 (<) 或大于 (>) 运算符时,它如何确定结果使用.

例如,如果我输入 print('abc' < 'bac') 我得到 True.我知道它比较字符串中的相应字符,但是不清楚为什么有更多的,因为缺乏更好的术语,权重"放在第一个字符串中 a 小于 b(第一个位置)而不是在第二个字符串(第二个位置)中 a 小于 b 的事实.

解决方案

来自 文档:

<块引用>

比较使用字典序订购:先前两项进行比较,如果它们不同,则决定了结果比较;如果它们相等,则比较接下来的两个项目,所以上,直到任一序列为累死了.

还有:

<块引用>

字符串的字典顺序使用 Unicode 代码点编号来对单个字符进行排序.

或在 Python 2:

<块引用>

字符串的字典顺序对单个字符使用 ASCII 顺序.

举个例子:

<预><代码>>>>'abc' >'背'错误的>>>ord('a'), ord('b')(97, 98)

一旦发现a小于b,就会返回结果False.不比较其他项目(正如您在第二个项目中看到的:b > aTrue).

注意大小写:

<预><代码>>>>[(x, ord(x)) for x in abc][('a', 97), ('b', 98), ('c', 99), ('d', 100), ('e', 101), ('f', 102), ('g', 103), ('h', 104), ('i', 105), ('j', 106), ('k', 107), ('l', 108), ('m', 109), ('n', 110), ('o', 111), ('p', 112), ('q', 113), ('r', 114), ('s',115), ('t', 116), ('u', 117), ('v', 118), ('w', 119), ('x', 120), ('y', 121), ('z', 122)]>>>[(x, ord(x)) for x in abc.upper()][('A', 65), ('B', 66), ('C', 67), ('D', 68), ('E', 69), ('F', 70), ('G', 71), ('H', 72), ('I', 73), ('J', 74), ('K', 75), ('L', 76), ('M', 77), ('N', 78), ('O', 79), ('P', 80), ('Q', 81), ('R', 82), ('S',83), ('T', 84), ('U', 85), ('V', 86), ('W', 87), ('X', 88), ('Y', 89), ('Z', 90)]

I'm wondering how Python does string comparison, more specifically how it determines the outcome when a less than (<) or greater than (>) operator is used.

For instance if I put print('abc' < 'bac') I get True. I understand that it compares corresponding characters in the string, however its unclear as to why there is more, for lack of a better term, "weight" placed on the fact that a is less than b (first position) in first string rather than the fact that a is less than b in the second string (second position).

解决方案

From the docs:

The comparison uses lexicographical ordering: first the first two items are compared, and if they differ this determines the outcome of the comparison; if they are equal, the next two items are compared, and so on, until either sequence is exhausted.

Also:

Lexicographical ordering for strings uses the Unicode code point number to order individual characters.

or on Python 2:

Lexicographical ordering for strings uses the ASCII ordering for individual characters.

As an example:

>>> 'abc' > 'bac'
False
>>> ord('a'), ord('b')
(97, 98)

The result False is returned as soon as a is found to be less than b. The further items are not compared (as you can see for the second items: b > a is True).

Be aware of lower and uppercase:

>>> [(x, ord(x)) for x in abc]
[('a', 97), ('b', 98), ('c', 99), ('d', 100), ('e', 101), ('f', 102), ('g', 103), ('h', 104), ('i', 105), ('j', 106), ('k', 107), ('l', 108), ('m', 109), ('n', 110), ('o', 111), ('p', 112), ('q', 113), ('r', 114), ('s', 115), ('t', 116), ('u', 117), ('v', 118), ('w', 119), ('x', 120), ('y', 121), ('z', 122)]
>>> [(x, ord(x)) for x in abc.upper()]
[('A', 65), ('B', 66), ('C', 67), ('D', 68), ('E', 69), ('F', 70), ('G', 71), ('H', 72), ('I', 73), ('J', 74), ('K', 75), ('L', 76), ('M', 77), ('N', 78), ('O', 79), ('P', 80), ('Q', 81), ('R', 82), ('S', 83), ('T', 84), ('U', 85), ('V', 86), ('W', 87), ('X', 88), ('Y', 89), ('Z', 90)]

这篇关于Python 使用的字符串比较技术的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆