Перемещение элементов в конец списка - PullRequest
0 голосов
/ 31 января 2019

Я хочу решить две проблемы, связанные с сортировкой моего списка в python.

1) В моем списке есть элемент, начинающийся с "noname", и после него следует число, подобное "noname3" или"noname4" (каждый список содержит только один noname + number)

Этот noname объединяет все nonames и число после него показывает, сколько там nonames.

Мой вопрос заключается в том, как я могу отправить этот элемент noname + integer в конец?

2) Как вы можете видеть ниже, функция sorted сначала будет сортировать английскийКорейский язык.Есть ли способ, которым я могу отсортировать сначала корейский, а затем английский?Конечно 'noname' в конце.

names =  ['Z', 'C', 'A B', 'noname3', 'ㄴ', 'ㄱ', 'D A', 'A A' , 'ㄷ']
sorted(names)

# Output
['A A', 'A B', 'C', 'D A','noname3', 'Z', 'ㄱ', 'ㄴ', 'ㄷ']

# Desired Output
[ 'ㄱ', 'ㄴ', 'ㄷ', 'A A', 'A B', 'C', 'D A', 'Z', 'noname3']

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Не зная, как именно корейские символы располагаются в алфавитном порядке, вот моя попытка (на основе начала @ kindall).Обратите внимание, что вы можете передать пользовательскую функцию в параметр key сортировщика

def sorter(char):
    #Place english characters after Korean
    if ord(char[0])>122:
        return ord(char[0])-12000
    else:
        return ord(char[0])+12000

lst=['Z', 'C', 'A B', 'noname3', 'ㄴ', 'ㄱ', 'D A', 'A A' , 'ㄷ']

sorted(lst, key=lambda x: (x.startswith('noname'),sorter(x)))

['ㄱ', 'ㄴ', 'ㄷ', 'A B', 'A A', 'C', 'D A', 'Z', 'noname3']
0 голосов
/ 31 января 2019

Используйте функцию key, которая сортирует элементы noname выше, чем элементы, отличные от noname.

sorted(names, key=lambda x: (x.startswith("noname"), x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...