Python中max()函数在字符串列表中是如何工作的?

27

我有一个清单:

list1 = [123, 'xyz', 'zara', 'abc']
print "Max value element : ", max(list1);

它给出:

Max value element : zara

请解释一下如何对字符串列表和数字列表进行比较。


如果只想比较字符串,那么你应该从示例中删除123,否则你应该修改你的问题,明确说明你想要比较不同的数据类型。 - Ghos3t
6个回答

18

这实际上是一个很好的问题,答案取决于你使用的是 Python2.x 还是 Python3.x …以及你使用的 Python 实现1

请参见 此处 了解关于 Python 如何比较不同类型的描述。该链接已经讲得非常透彻了,但作为一个快速摘要:

  • 相同类型对象的比较结果与你预期的一致。
  • 不同类型对象的比较结果在 Python2.x 中根据它们的类型名称进行排序,在 Python3.x 中则会引发错误(除非定义了自定义比较运算符)。
  • 旧式类违反所有规则,但无论如何都不应该使用。

1从存在如此多的不确定性中可以看出,这并不是一个真正明确的情况,因此您应该尽量避免。


我正在使用Python 2.7.3版本。 - Tushar Patil
@Tushar.PUCSD -- 这就解释了为什么你没有得到 TypeError 错误;但是,其他 Python 实现可以自由地从你的示例中返回 123。哪种类型在排序中排在第一位是“任意的”。 - mgilson
@mgilson,print语句也是Python2的特性。 - John La Rooy
要在Python3中获得Python2的行为,您需要类似于max(list1, key=lambda x:(type(x), x))这样的东西,这是避免对那些类型的事物进行排序的一个很好的理由。 - John La Rooy
1
@gnibbler -- 当然可以。但是,如果回答这个问题而不说出在Python3.x中行为如何改变,那将对Python社区造成严重的伤害!毕竟,我们不能让人们认为继续比较其他类型是可以接受的,不是吗? :) - mgilson

10

它按字母顺序“排序”单词,并返回字母表中最后面的一个(仅对列表中的项目进行排序,不改变其顺序,因此我在引号内写下了“排序”):

list1 = ["kyle", "darius"]
max(list1) 

--> 返回kyle,因为kd之后

list2 = ["kaula", "kzla", "kayla", "kwala"]
max(list2) 

--> 返回kzla,因为kz在字母表中排在kakw之后

list3 = ["kyle", "darius", "janna", "set", "annie", "warwick", "bauuuuuu"]
max(list3)

--> 返回 warwick

我正在使用 Python 3.7,当我尝试将字符串与数字混合使用时:

list4 = [13341412, "zara", "jane", "kada"]
max(list4)

我遇到了一个错误:

Traceback (most recent call last): File "", line 1, in TypeError: '>' not supported between instances of 'str' and 'int'

在Python 3.7中,您不能混合使用整数和字符串。


3
list1=['2020','4','890','70','891','898']
max(list1)

--> 返回 898

如果仅有数字字符串,它将比较第一个最大数字,如果有两个(在这种情况下是以8开头的三个)- 它将查找同一数字的第二个数字并继续比较,直到找到更大的数字。因此,返回898。


2
在涉及到十进制数的情况下,结果可能会出现奇怪的情况。因此,我只是想提一下这些问题,为其他人节省一些时间。
b=['79.68', '9.11', '5.75']
max(b)
--> '9.11'

这是因为它比较每个字符串中相应字符的ASCII码,我们可以通过以下方式确认:
[tuple(ord(j) for j in i) for i in b]
--> [(55, 57, 46, 54, 56), (57, 46, 49, 49), (53, 46, 55, 53)]

0

除了其他答案之外,我想补充的是,在Python 3中,对于字符串列表的最大值会给出以下输出:-

l=["pl","cl pi"]
print(max(l))
#OUTPUT --> pl

这是由于 Python 3 中 max 函数的检查造成的。max 函数会检查所有字符串的第一个字符,并找到最高的(按 ASCII 顺序),然后将其作为输出返回!


0

我相信你也可以像这里所解释的那样,在max方法中指定键。

因此,你可以看到默认情况下结果zara是基于长度的:

max(list1, key=len) -> zara


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接