2016-03-14 2 views
0

Я использую следующий вид кода сортировки:Сортировка наборов нелатинских символов в порядке строки?

letters = '세븐일레븐' 
old = [('세븐', 8), ('븐', 2), ('일', 5), ('레', 4)] 
new = sorted(old, key=lambda x: letters.index(x[0])) 

Для не-латинских символов, вывод такой же, как на входе:

[('세븐', 8), ('븐', 2), ('일', 5), ('레', 4)] 

Что я ожидаю это:

[('세븐', 8), ('일', 5), ('레', 4), ('븐', 2)] 

ответ

1

Нет проблем с сортировкой. Обратите внимание, что буква «븐» дважды появляется в вашей строке букв. Поскольку индекс возвращает первый индекс этой буквы, letter.index ('븐') оценивается в 1, что дает ему высокий приоритет.

+0

Я думаю, что это было бы хорошим дополнением к ответу ShadowRanger, вместо отдельного ответа. Но хорошо. Я думаю, что он все равно заслуживает +1. –

1

Почему вы ожидаете '일' Сортировка: до '븐'? '븐' - второй символ в letters; index собирается вернуть первый экземпляр, который он находит.

Если цель состоит в том, чтобы рассматривать специфические последовательности по-разному, вам нужно определить letters как list полных строк, вы заботитесь о том, не было ни одного плоского str, например:

letters = ['세븐', '일', '레', '븐'] 

Тогда index вызов будет обработайте '세븐' отдельно от '븐', и вы получите ожидаемый порядок вывода.

+0

Мне нужно, чтобы они были одинаковыми, если вы должны были создать строку из старого списка i.e. '. .join (new [0]) == буквы. Также я не могу создать этот список в качестве ввода, поскольку не знаю, что первые два символа являются парой. Мой скрипт определяет наилучшую комбинацию наборов символов, определяемых счетчиком (что представляет это число). Я хочу сказать, что вход мог бы (('세븐', 8), ('븐', 2), ('일레', 4)]. Или было бы возможно создать список букв, который вы определяете, используя старые и буквы? – thomascrha

+0

@frostware: Если вы создали строку из обоих, она будет соответствовать; '. '.join (ss для ss, _ in new) ==' '.join (letters)'. Если у вас нет способа узнать, что первые два символа являются парой, то как вы ожидаете отличить '븐' как подстроку в том, что оказывается другой подпоследовательностью vs' 븐 'самостоятельно? Вы можете выполнить эвристику или исчерпывающее исследование, чтобы попытаться создать '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – ShadowRanger

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