2013-04-29 2 views
0
a=[(' ', '000'), ('\n', '001000'), ('v', '00100100'), ('O', '0010010100'),('e', '110'), ('n', '1110'), ('r', '1111')] 

и я хочу отсортировать список сначала по длине числа, а затем по алфавитному порядку всех символов, имеющих одинаковую длину. Я попытался сортировать по циклу, но он просто сортирует мою длину, а не в алфавитном порядке.проблема с сортировкой в ​​python

a=[(' ', '000'), ('\n', '001000'), ('v', '00100100'), ('O', '0010010100'),('e', '110'), ('n', '1110'), ('r', '1111')] 
for i in range (len(a)): 
    for j in range(1,len(a)): 
     if len(a[i][1])>len(a[j][1]): 
      swap = a[i] 
      a[i]=a[j] 
      a[j]=swap 

У кого-нибудь есть идея ??? спасибо заранее

+0

Является ли это для класса? У Python есть несколько методов сортировки. – squiguy

ответ

4

Используйте key аргумент sort:

a.sort(key=lambda item: (len(item[1]), item[0])) 

Или более пространно:

def sort_func(item): 
    return len(item[1]), item[0] 

a.sort(key=sort_func) 
+0

wow спасибо, может, объясните мне больше, как это работает? –

+0

@TommyNgo: Посмотрите, помогает ли более подробный способ написания. – Blender

+0

может объяснить, как key = sort_func заставить его работать, пожалуйста? –

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