gpt4 book ai didi

python - 为什么 Python 的 max() 函数在带有前导空格的字符串上放置一个低值?

转载 作者:行者123 更新时间:2023-11-28 22:47:29 33 4
gpt4 key购买 nike

问题

我注意到 Python 2.7.6 中的内置 max() 函数似乎在带有前导空格的字符串上放置了一个低“值”,除非我特别告诉它使用len 函数作为键。这是为什么?

例子

考虑交互式解释器中的这个片段:

>>> max(['abc', 'defgh'])
'defgh'
>>> max(['abc', ' defgh'])
'abc'
>>> max([' defgh'])
' defgh'
>>> max(['abc', ' defgh'], key=len)
' defgh'

注意事项

我试着查看 the source对于 max(),它调用 min_max() .在 line 1370 , 处理没有指定key的情况。有评论说“没有关键功能;值(value)是项目”。我不知道除了长度之外还有什么值可以与字符串关联,那么这个注释是什么意思?另外,为什么前导空格会影响此 C 代码键入的神奇值?

最佳答案

Python 根本不会“忽略”字符串 - 这种行为正是因为 Python 不会忽略任何内容。

而是一个空格出现在字母和字符串按字典顺序(区分大小写!)或逐个字符排序。查看 ASCII table用于空格 (Space=32) 和英文字母表中其他字符 ("a"=97) 的相对排序。

" foo" < "foo"是真的,min(" foo", "foo")" foo"并且,相反,max(" foo", "foo")"foo" .因此,这也会导致 "Z" < "a"是真实的,这可能令人惊讶..

如果代码想要忽略空格那么max(.., key = lambda i: i.strip())可以使用,也许还可以适本地使用大小写规范化。

(在这种情况下,添加 key 长度函数的结果是无关紧要的,因为更大的长度是最大的。)

关于python - 为什么 Python 的 max() 函数在带有前导空格的字符串上放置一个低值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26188214/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com