2017-01-18 3 views
1

Когда у меня есть list целых чисел и букв, Я хочу отсортировать эти элементы в определенном порядке. Например,Python: как отсортировать массив с целыми числами и буквами?

ex_array = [1, 3, 2', 2, 1', 3', 3] 

должны быть отсортированы по

sorted(ex_array) = [1', 1, 2', 2, 3', 3, 3] 

В этом случае порядок букв дается

1' < 1 < 2' < 2 < 3' < 3. 

я могу сделать код, когда состоящий только из целых чисел. Но я не знаю, как сравнивать символы с загрунтованными с непечатаемыми.

Не могли бы вы рассказать мне, что делать в Python?

+7

Что такое '1''? Вы имеете в виду '' 1 '' 'или' "1" '? – MYGz

+0

Это просто символ. Но мне нужно их отличить. –

+0

Затем вы должны отличать цитаты. '' 1 "' или ''1'' является строкой,' 1' является int и '1'' является синтаксической ошибкой. – MYGz

ответ

9

Сортировка по целому значению каждого элемента, а также, что элемент является ли целое число:

>>> a = [1, 3, '2', 2, '1', '3', 3, '10', 10, 'potato', "1'", lambda: None, '-3', -3, -4] 
>>> sorted(a, key=lambda x: (int(''.join(v for i,v in enumerate(str(x)) if v.isdigit() or (i==0 and v=='-')) or 0), isinstance(x, int))) 
[-4, '-3', -3, 'potato', '1', "1'", 1, '2', 2, '3', 3, 3, '10', 10, <function <lambda> at 0x000000DAD51DB9D8>] 

Если два элемента имеют одинаковое целое значение, строка будет помещен перед числом.

+0

@schwobaseggl - Ты абсолютно прав. Изменено с 'str' на' int'. – TigerhawkT3

+0

@schwobaseggl - '1'' является синтаксической ошибкой, поэтому я предполагаю, что они означают строку. Вы можете сделать 'int (x.strip (" '"))', если элементы были фактически строками типа '' 1' "' хотя. – TigerhawkT3

+0

@schwobaseggl - Ну, новое редактирование делает его намного более надежным. Он даже обрабатывает произвольные значения, такие как «картофель». – TigerhawkT3

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