2015-02-11 2 views
-1

Я хочу, чтобы список сортировался как по отсортированному (списку) методу, а по строке. Я имею в виду, вместо того, чтобы сортировать «abcdefghijklmnopqrstuvwxyz», иметь возможность контролировать это. Например, сортируйте в порядке «zyabxwcdvueftsghrqijpoklmn», но делайте это на основе любой 26-буквенной строки, которую вы вставляете. Как мне это сделать?Сортировка списка на основе строки - Python

Сортированный (список) метод сортирует список в алфавитном порядке. Если я хочу обратный алфавитный порядок, это также довольно просто. Но скажите, что я хочу полностью настроить приоритет писем? По умолчанию сортирует список в порядке 'abcdefghijklmnopqrstuvwxyz'. Что делать, если я могу ввести строку, например 'zyabxwcdvueftsghrqijpoklmn', и я мог бы отсортировать список на основе этого приоритета? Итак, учитывая ['moose', 'apple', 'zebra', 'penguin'], и строку 'zyabxwcdvueftsghrqijpoklmn', я бы получил ['zebra', 'apple', 'penguin', 'moose'], из-за порядка буквы появятся в строке.

+0

Вы должны создать свой собственный алгоритм, чтобы сделать это ... и, поскольку этот вопрос сформулирован, он выходит за рамки SO. – user2366842

+0

См. Ниже Люк. Это на самом деле очень просто. –

ответ

5
def make_sort_key(key_string): 
    # make index 
    index = {} 
    for i,ch in enumerate(key_string): 
     index[ch] = i 
    # sort any char not in index following any char in index 
    omitted = len(index) 
    val = index.get 

    def key_fn(s): 
     return [val(ch, omitted) for ch in s] 

    return key_fn 

затем

items = [ 
    "abcde", 
    "fghij", 
    "fghde" 
] 

items.sort(key = make_sort_key("gfiabdcej")) 

приводит

['fghij', 'fghde', 'abcde'] 
+0

Я думаю, что лучше не изобретать колесо. Не обижайтесь, но я чувствую, что мой маршрут более эффективен. –

+3

@MalikBrahimi - этот ответ делает больше, чем ваш, правильно реализуя лексическую сортировку. Проверьте как на '['fghde', 'fghij', 'abcde']' с '' gfiabdcej "' в качестве строки упорядочения - правильный sort будет помещать 'fghij' перед' fghde'. Это также более эффективно, хотя это не имеет значения для типов данных, которые мы видим здесь: 'index.get' на dict быстрее, чем' index' в списке. –

+0

На самом деле я исправил свой код, теперь он на самом деле более эффективен и идет так далеко. –

Смежные вопросы