将min()和max()函数与多个字符串一起使用

时间:2019-03-17 23:47:43

标签: python python-3.x

我正在研究一个简短的CodingBat问题:给定两个字符串a和b,返回格式为short + long + short的字符串,其中较短的字符串在外部,较长的字符串在内部。

这是我所拥有的:

def combo_string(a, b):
    short = min(a, b)
    long = max(a, b)
    return short + long + short

这个想法:min(a, b)将返回两个字符串中的最短字符串,而max(a, b)将返回两个字符串中的最长字符串。但是,此代码无法正常工作。

combo_string('a', 'bb')返回'abba'(正确),但是combo_string('Hello', 'hi')返回'HellohiHello'(不正确,实际上与我想要的相反)。

我错误地使用了min()和max()函数吗?

3 个答案:

答案 0 :(得分:1)

hello按字母顺序在hi之前,因此它是“最小值”。您要做的是使用key参数指定您想要的最小长度,而不是最小的值。

min(a, b, key=len)

答案 1 :(得分:1)

您需要指定键功能(将为len)。否则,Python将按字典顺序(基本上按字母顺序)排序,这几乎肯定不是您想要的:

def combo_string(a, b):
    short = min(a, b, key=len)
    long = max(a, b, key=len)
    return short + long + short

例如:

min('a', 'bb', key=len)
# 'a'
min('Hello', 'hi', key=len)
# 'hi'

基本上,不仅仅使用><运算符进行比较(即a > b或其他),minmax函数将使用key函数的结果(即len(a) > len(b)或其他任何值)。

答案 2 :(得分:0)

  

我错误地使用了min()和max()函数吗?

是的。基本上,您的问题是max(a, b)并未完全按照您的想法做。 max(a, b)比较字符串对象ab本身。 Python实现的字符串之间的比较不是通过字符串长度,而是通过它们的lexicographical values

这意味着有时max(a, b)可能会起作用,但并非总是如此。您需要告诉Python通过使用len直接比较字符串的长度。