如何对字符串进行排序?

时间:2019-02-21 19:25:50

标签: python python-3.x string list

任务是:您能否制作一个程序

将此字符串设为大写 给它按姓氏的字母顺序排序。 当姓氏相同时,请按名字排序。来宾的姓氏和名字出现在括号之间,并用逗号分隔。

我做了什么:

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)

如何根据需要对其进行排序?

2 个答案:

答案 0 :(得分:1)

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

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

    return "".join(sorted(formatted_names_list))

答案 1 :(得分:0)

您想要的是在列表上调用sort函数并指定其排序方式。 您的s1列表包含两个项的元组。而且您似乎希望您的排序是按第一项进行的,而第二项是对第二种的(打破关系)。为了实现这一点,您应该首先对次要条件进行排序,然后对主要条件进行排序。这是因为python的排序是“稳定的”,这意味着在每个排序操作中,联系都以它们开始的顺序保持联系。 为了给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()