我有两份清单:
a = ['computador', 'caderno', 'lapiseira', 'caneta', 'cadeira', 'mesa']
b = ['computador', 'celular', 'café', 'água']
当我尝试将列表长度与if条件进行比较时,结果正是我所期望的:列表a大于列表b
if len(a) > len(b):
print('a > b')
else:
print('a < or = b')
输出为“a>;b”
我在没有len的情况下尝试了相同的比较,结果是相反的:“a<;或=b”
if a > b:
print('a > b')
else:
print('a < or = b')
python在第二种情况下比较什么
使用时:
列表按元素进行比较。首先比较
a[0]
和b[0]
,然后比较a[1]
和b[1]
。在比较这两个元素时,由于存在字符串,因此将它们视为列表,并执行相同的过程。对于字符串的比较,使用它们的ASCII数值因此,当您使用>;b、 首先比较
'computador'
和'computador'
,因为两者相同,所以比较'caderno'
和'celular'
。在本例中,第一个字符是相同的c
,因此解释器检查第二个字符a
和e
。由于e
在数值上更大,因此条件为true,执行print('a > b')
在两个iterables*(至少对于字符串,列出ans元组)上使用比较运算符
<
、<=
、>
、>=
时,Python不会比较其长度,而是按字典顺序进行比较。这意味着它将一个iterable的每个项与处于相同位置的另一个iterable的项进行比较。因此,在您的示例中,Python比较:Python实际上只进行比较,直到它不再是真理,所以它在
'computador' > 'computador'
中停止比较。我只是用其中的四个来说明它是如何工作的因此,对于比较
a > b
,它返回False
(*)并非每个iterable都支持使用上述运算符进行比较。它们必须实现才能像那样使用。Python允许您在默认情况下(据我所知)仅在字符串、元组和列表中使用此行为
例如,对于
set
实例,它有一个completely different behavior在第二种情况下,python正在逐个元素进行比较,并且
'celular'
大于'caderno'
。如果两个列表在最后一个元素之前是相等的,那么长度较短的列表将更少。有事总比无事重要字符串类似于列表,但对每个字符的序号进行元素级比较。这可能遵循一种语言中广为接受的排序规则,但不能保证它是正确的。例如
'ä' is greater than 'b'
此外,unicode字符可以用多种方式表示
unicodedata.normalize
将多字符序列转换为规范化形式以进行比较。在比较文本字符串时,我们可能应该始终这样做,但由于我们通常不会遇到这种情况,因此错误并不明显相关问题 更多 >
编程相关推荐