2013-06-05 3 views
3

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

В качестве примера у меня есть:

hello = " hola %d" % (number_from_database) 
bye = "adios %d" % (number_from_database_again) 

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

+1

У вас есть список из них для сортировки? Сортируйте их по сравнению с чем? –

+0

, например, иногда пользователь может сортировать в сети «bye» раньше, чем привет, так что hello = «hola 2» и bye = «adios 1», или иногда пользователь может сортировать привет перед тем, как это сделать, поэтому я хочу знать, как сортировать их bye число внутри, спасибо: D –

+0

Это не делает это яснее. Сортировка относится к последовательности элементов; все, что у вас есть, это две переменные: 'hello' и' bye'. –

ответ

8

Вы можете передать ключ рода:

sorted(l, key=lambda x: int(re.sub('\D', '', x))) 

Например:

In [1]: import re 

In [2]: l = ['asdas2', 'asdas1', 'asds3ssd'] 

In [3]: sorted(l, key=lambda x: int(re.sub('\D', '', x))) 
Out[3]: ['asdas1', 'asdas2', 'asds3ssd'] 

Где re.sub('\D', '', x) заменяет everything but the digits.

+0

Человек, ты как бог, который работает, спасибо за ваш ответ. Я не знаю, как я могу поблагодарить тебя. Бог благословит вас –

+0

Но у меня 14 репутации. Мне нужно 15, я буду повышать, когда у меня есть 15 –

+0

Спасибо, у вас уже есть один шанс! : D Спасибо !!! –

0
salutations = [hello, bye] 
salutations.sort(key=lambda x: int(filter(lambda s: s.isdigit(), x.split())[0])) 
0

Просто небольшое дополнение к ответу Энди.

Если вы хотите отсортировать набор, которые также содержат строки без каких-либо чисел:

sorted(l, key=lambda x: int('0'+re.sub('\D', '', x))) 

, который бы поставил эти строки без любого числа в самом начале.

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