2013-02-12 3 views
1

Вот мой вопрос я есть tuple1=[(1, 3), (3, 2), (2, 1)] я хочу, чтобы отсортировать кортеж на основе последней цифры каждого кортежа, так что результирующая будет выглядеть следующим образом output=[(2, 1), (3, 2), (1, 3)] ниже мой кодPython кортежей сортировки на основе последнего элемента

i=0 
for x in tuples: 
    c.append(x[len(x)-1]) 
    last=sorted(c) 
    for y in last.iteritems(): 
     if(y in x[len(x)-1]): 
      print x    
      #b.insert(i,x) 
i=i+1 

после запуска IAM получает сообщение об ошибке

Traceback (most recent call last): 
    File "x.py", line 47, in <module> 
    sort_last([(1, 3), (3, 2), (2, 1)]) 
    File "x.py", line 35, in sort_last 
if(y in x[len(x)-1]): 
    TypeError: argument of type 'int' is not iterable 
+0

Неплохо, этот вопрос касается не сортировки, а решение идентично: укажите функцию 'key' для' sort' или 'sorted'. –

ответ

10

Укажите key аргумент в функции sorted.

>>> tuple1=[(1, 3), (3, 2), (2, 1)] 
>>> output = sorted(tuple1, key=lambda x: x[-1]) 
>>> print output 
[(2, 1), (3, 2), (1, 3)] 

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

+0

+1 для этого элегантного решения. – George

+0

yup it works .. но есть ли какой-либо другой метод, не используя 'lambda', я имею в виду использование для самого цикла .... – Friend

+2

Если вам это нужно в обратном порядке, вы также можете добавить ключевое слово 'reverse':' output = sorted (tuple1, key = lambda x: x [-1], reverse = True) ' – drekyn

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