2015-11-18 2 views
1
list = ['c:8', 'c:9', 'c:13', 'c:19', 'c:2', 'c:3', 'c:0', 'c:1', 'c:6', 'c:7', 'c:4', 'c:5', 'c:14', 'c:18', 'c:17', 'c:12', 'c:15', 'c:11', 'c:10', 'c:16', 'c:20'] 

Я использовал "отсортированный()", но получить этот результатКак я могу отсортировать список номеров в Python?

['c:0', 'c:1', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14', 'c:15', 'c:16', 'c:17', 'c:18', 'c:19', 'c:2', 'c:20', 'c:3', 'c:4', 'c:5', 'c:6', 'c:7', 'c:8', 'c:9'] 

Но что я хочу

['c:0', 'c:1', 'c:2', 'c:3', 'c:4', 'c:5', 'c:6', 'c:7', 'c:8', 'c:9', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14', 'c:15', 'c:16', 'c:17', 'c:18', 'c:19','c:20'] 

Кроме того, получить то, что я хочу, я хочу, почему sorted() не мог работать.

+0

'sorted (l, key = lambda x: int (x.split (':') [1]))' –

+0

'sorted'" не работает ", потому что это не числа, это строки, поэтому они сортируются в алфавитном порядке. –

ответ

2
>>> l = ['c:8', 'c:9', 'c:13', 'c:19', 'c:2', 'c:3', 'c:0', 'c:1', 'c:6', 'c:7', 'c:4', 'c:5', 'c:14', 'c:18', 'c:17', 'c:12', 'c:15', 'c:11', 'c:10', 'c:16', 'c:20'] 
>>> l.sort(key=lambda x: int(x[2:]) 
>>> l 
['c:0', 'c:1', 'c:2', 'c:3', 'c:4', 'c:5', 'c:6', 'c:7', 'c:8', 'c:9', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14', 'c:15', 'c:16', 'c:17', 'c:18', 'c:19', 'c:20'] 

Поскольку 'c:1', 'c:10', 'c:11' являются строки, и 'c:1', 'c:10', 'c:11' все начинают с c:1. Итак, вы получаете что-то вроде 'c:1', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14'.

Как мой код, используйте ключевой аргумент sorted() или list.sort(), и используйте срез, чтобы получить номер, затем используйте int() функцию, скрывающую число в int.

+2

Не будет '' 'lambda x: int (x [2:])' '' проще? – wnnmaw

+1

@wnnmaw: Хорошая идея, отредактирована. Спасибо: P –

1

sorted с lambda такой, что sort на номер string.

sorted(list, key=lambda x:int(x.split(':')[-1]))

['c:0', 
'c:1', 
'c:2', 
'c:3', 
'c:4', 
'c:5', 
'c:6', 
'c:7', 
'c:8', 
'c:9', 
'c:10', 
'c:11', 
'c:12', 
'c:13', 
'c:14', 
'c:15', 
'c:16', 
'c:17', 
'c:18', 
'c:19', 
'c:20'] 
1

Вам нужна функция лямбды в качестве ключа для сортировки, чтобы разделить каждый элемент и конвертировать вторую часть целого:

l = sorted(l, key=lambda x: int(x.split(':')[1])) 

Также вы должны переименовать list переменные, так как оно зарезервировано имя в python.

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