2015-05-23 46 views
-3

爲什麼Python 3.4中的max()函數在值列表中給我的值小於預期值?Max()函數不返回Python中的最大值3.4

實施例1,其中期望值爲'marco'

>>> max('zara', 'marco') 
'zara' 

實施例2,其中期望值爲'cherries'

>>> max('apples', 'oranges', 'cherries', 'banana') 
'oranges' 
+0

爲什麼marca比zara更大? –

+0

按字典順序o> c不是嗎? –

回答

10

字符串進行排序lexicographically,不受尺寸。

  • zara是 '最大的',因爲它是最後的排序順序,marco後:

    >>> 'zara' > 'marco' 
    True 
    >>> sorted(['zara', 'marco']) 
    ['marco', 'zara'] 
    
  • oranges來後​​,bananacherries

    >>> sorted(['apples', 'oranges', 'cherries', 'banana']) 
    ['apples', 'banana', 'cherries', 'oranges'] 
    

如果你想在最長字符串,你需要告訴max()使用,作爲重點:

max(sequence, key=len) 

演示:

>>> max('zara', 'marco') 
'zara' 
>>> max('zara', 'marco', key=len) 
'marco' 
>>> max('apples', 'oranges', 'cherries', 'banana') 
'oranges' 
>>> max('apples', 'oranges', 'cherries', 'banana', key=len) 
'cherries' 
+0

lexicographically您的意思是? – Tommy

+2

@Tommy:跟上來,這個錯字很久以前就被糾正了! :-P –

1

max可與數字,字符串和其他類型,但是對於字符串,它不能簡單地工作看字符串的大小 - 它使用詞法排序這是你會看到英語詞典中單詞的順序。

因此,在您的案例中,zaraoranges最後出現在字典中,因此爲max()值。

0

max()中的字符串將按照ASCII順序進行比較,當您比較'zare'和'marco'時,ACSII中z的值爲122,m的值爲109,因此zara大於marco。如果第一個字母的值相等,則會比較連字母,直到字符串相等(相同的字符串)或比其他字符串大的字符串之一。

0

max使用排序功能,並會按字母順序給出最後一個單詞。如果你想要最長的單詞,你需要做[len(「zacra」),len(「macros」)....]

+0

或者你可以做key = len – ytpillai