不带len函数的Python理论列表比较

2024-09-30 00:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两份清单:

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在第二种情况下比较什么


Tags: or列表lenif情况elseprintmesa
3条回答

使用时:

if a > b:
  print('a > b')
else:
  print('a < or = b')

列表按元素进行比较。首先比较a[0]b[0],然后比较a[1]b[1]。在比较这两个元素时,由于存在字符串,因此将它们视为列表,并执行相同的过程。对于字符串的比较,使用它们的ASCII数值

因此,当您使用>;b、 首先比较'computador''computador',因为两者相同,所以比较'caderno''celular'。在本例中,第一个字符是相同的c,因此解释器检查第二个字符ae。由于e在数值上更大,因此条件为true,执行print('a > b')

在两个iterables*(至少对于字符串,列出ans元组)上使用比较运算符<<=>>=时,Python不会比较其长度,而是按字典顺序进行比较。这意味着它将一个iterable的每个项与处于相同位置的另一个iterable的项进行比较。因此,在您的示例中,Python比较:

'computador' > 'computador' (false since they are the same)
'caderno' > 'celular' (false because the letter 'a' of caderno comes first than the letter 'e' of celular)
'lapiseira' > 'café' (true because the 'l' of lapiseira is greater of the 'c' of café)
'caneta' > 'água' (false because the 'c' of caneta is not greater than the 'á' (note the accent mark) of água)

Python实际上只进行比较,直到它不再是真理,所以它在'computador' > 'computador'中停止比较。我只是用其中的四个来说明它是如何工作的

因此,对于比较a > b,它返回False


(*)并非每个iterable都支持使用上述运算符进行比较。它们必须实现才能像那样使用。Python允许您在默认情况下(据我所知)仅在字符串、元组和列表中使用此行为

例如,对于set实例,它有一个completely different behavior

在第二种情况下,python正在逐个元素进行比较,并且'celular'大于'caderno'。如果两个列表在最后一个元素之前是相等的,那么长度较短的列表将更少。有事总比无事重要

字符串类似于列表,但对每个字符的序号进行元素级比较。这可能遵循一种语言中广为接受的排序规则,但不能保证它是正确的。例如'ä' is greater than 'b'

此外,unicode字符可以用多种方式表示unicodedata.normalize将多字符序列转换为规范化形式以进行比较。在比较文本字符串时,我们可能应该始终这样做,但由于我们通常不会遇到这种情况,因此错误并不明显

相关问题 更多 >

    热门问题