我正在研究一个简短的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()函数吗?
答案 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
或其他),min
和max
函数将使用key
函数的结果(即len(a) > len(b)
或其他任何值)。
答案 2 :(得分:0)
我错误地使用了min()和max()函数吗?
是的。基本上,您的问题是max(a, b)
并未完全按照您的想法做。 max(a, b)
比较字符串对象a
和b
本身。 Python实现的字符串之间的比较不是通过字符串长度,而是通过它们的lexicographical values。
这意味着有时max(a, b)
可能会起作用,但并非总是如此。您需要告诉Python通过使用len
直接比较字符串的长度。