如何对字符串排序?

2024-09-29 23:27:35 发布

您现在位置:Python中文网/ 问答频道 /正文

任务是:你能做一个程序

将此字符串设为大写 按姓氏的字母顺序排列。 当姓氏相同时,按名字排序。客人的姓和名出现在括号之间,括号之间用逗号隔开。你知道吗

我所做的:

def meeting(s):
    res=''
    for i in s.split(';'):
        s1 = i.split(':')[::-1]
        res += '(' + ', '.join(s1) + ')'
    return  res.upper()

输入:

testing("Alexis:Wahl;John:Bell;Victoria:Schwarz;Abba:Dorny;Grace:Meta;Ann:Arno;Madison:STAN;Alex:Cornwell;Lewis:Kern;Megan:Stan;Alex:Korn") 

这就是我得到的:

(WAHL, ALEXIS)(BELL, JOHN)(SCHWARZ, VICTORIA)(DORNY, ABBA)(META, GRACE)(ARNO, ANN)(STAN, MADISON)(CORNWELL, ALEX)(KERN, LEWIS)(STAN, MEGAN)(KORN, ALEX)

我需要的是:

(ARNO, ANN)(BELL, JOHN)(CORNWELL, ALEX)(DORNY, ABBA)(KERN, LEWIS)(KORN, ALEX) (META, GRACE)(SCHWARZ, VICTORIA)(STAN, MADISON)(STAN, MEGAN)(WAHL, ALEXIS)

如何根据需要进行分类?你知道吗


Tags: resjohn括号splitalex姓氏s1alexis
2条回答

您想要的是调用列表上的sort函数并指定排序方式。 您的s1列表包含两个元组,每个元组包含两个项。你似乎希望你的排序是第一项的第一,第二项的第二排序(打破联系)。为了实现这一点,您应该首先对次要条件进行排序,然后对主要条件进行排序。这是因为python的sort是“稳定的”,这意味着在每个sort操作中,关系都保持在它们开始时的顺序。 要给排序函数指定条件,请将lambda指定为key参数,lambda有一个参数(将是列表中的每个元组)并返回要排序的属性(元组中的特定项)。你知道吗

举个例子:

def meeting(s):
    res=''
    for i in s.split(';'):
        s1 = i.split(':')[::-1]
        s1.sort(key=lambda x: x[1])  # sort according to secondary condition
        s1.sort(key=lambda x: x[0])  # re-sort with primary condition 
        res += '(' + ', '.join(s1) + ')'
    return res.upper()

由于您将姓氏放在输出的第一位,因此可以先格式化,然后按字母顺序排序:

def meeting(names):
    formatted_names_list = ["({}, {})".format(*reversed(name.split(":"))).upper()
                            for name in names.split(";")]

    return "".join(sorted(formatted_names_list))

相关问题 更多 >

    热门问题