基于字母顺序比较字符串

23

编写一个函数,它以两个字符串作为参数并返回较长的那一个。如果两个字符串长度相等,则返回字母顺序较早的那一个。

这是我到目前为止所拥有的:

    def strings(x,y):
        if len(x) > len(y):
            return x
        if len(x)==len(y):
            return 
        else:
            return y

我在想如何编写代码,使其在第二个if语句中选择按字母顺序排列的第一个字符串。


11
这件令人难以置信的事情是,我找不到它的副本。 - The Unfun Cat
找到重复项本来不应该很困难。问题在于如何按字母顺序比较字符串(长度的部分是一个干扰项,因为它已经处理过了),而且由于这是默认情况,回答这个问题等同于知道它默认发生的情况 - 因此,详细说明默认行为的问题是完全令人满意的重复。话虽如此,在 Stack Overflow 历史的不同阶段,存在着对“简单”问题的不适当偏见,这使我们失去了重要的规范。 - Karl Knechtel
3个回答

16

您可以直接比较字符串。 x<y 的意思是“x按字母顺序排在y之前吗?”所以您可以使用以下代码替换第二个块:

您可以直接比较字符串。 x<y 的意思是“x按字母顺序排在y之前吗?”所以您可以用以下代码替换第二个块:

if len(x) == len(y) and x < y:
    return x

13

这应该有效:

if len(x)==len(y):
   return min(x,y)

9
也许将sorted(x, y)[0]表达更清晰会更好。 - Martijn Pieters
9
顺便提一下,当处理大小写混合的字符串时要小心。min("B","a")将返回"B",因为在字符编码中它比"a"靠前。 - kreativitea
3
@kreativitea 很好的建议。为了防止这种情况,你可以使用 min(x.lower(), y.lower()) 或者根据 @Martijn Pieters 的建议使用 sorted([x, y], key=str.lower)[0] - Jonny

5
def f(x,y):
    return len(x) != len(y) and max([x,y],key=len) or min(x,y)

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