任务是:您能否制作一个程序
将此字符串设为大写 给它按姓氏的字母顺序排序。 当姓氏相同时,请按名字排序。来宾的姓氏和名字出现在括号之间,并用逗号分隔。
我做了什么:
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)
如何根据需要对其进行排序?
答案 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()