Как отсортировать строку? - PullRequest
       2

Как отсортировать строку?

0 голосов
/ 21 февраля 2019
Задача

: Можете ли вы создать программу, которая

делает эту строку заглавной и сортирует ее в алфавитном порядке по фамилии.Когда фамилии совпадают, сортируйте их по имени.Фамилия и имя гостя указываются в скобках, разделенных запятой.

что я сделал:

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

input:

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

thisчто я получил:

(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 голосов
/ 21 февраля 2019

Поскольку вы вводите фамилию первым в выводе, вы можете сначала выполнить форматирование, а затем просто отсортировать по алфавиту:

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

    return "".join(sorted(formatted_names_list))
0 голосов
/ 21 февраля 2019

Вам нужно вызвать функцию сортировки в списке и указать способ ее сортировки.Ваш s1 список содержит кортежи из двух предметов каждый.И вы, похоже, хотите, чтобы ваша сортировка была первой по первому элементу, а вторичная сортировка (разрыв связи) по второму элементу.Чтобы достичь этого, вы должны сначала отсортировать по вторичному условию, а затем по первичному.Это связано с тем, что сортировка python является «стабильной», что означает, что в каждой операции сортировки связи сохраняются в том порядке, в котором они начинались.Чтобы задать условие для функции сортировки, вы указываете лямбду в качестве аргумента key, лямбда имеет один аргумент (будет каждым кортежем в списке) и возвращает свойство, по которому вы хотите отсортировать (конкретный элемент в кортеже).).

Вот пример:

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()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...