Есть ли более элегантное решение, чем предусмотрено для сортировки кортежей? - PullRequest
0 голосов
/ 15 января 2012

Я работал над некоторой уловкой в ​​отношении кортежей и наконец решил ее ... но я чувствовал, что мое кодирование действительно ужасно.Есть ли какой-нибудь питон / более простой способ?По сути, этот вопрос дает вам кортеж, и вам нужно отсортировать кортеж, удалить числа из одного и того же кортежа, а затем создать такой вывод:]

В начале у вас есть ...

t=[(4,'make'),(1,'sentence'),(0,'this'),(3,'now'),(5,'sense'),(2,'should')] 

Мое решение

t=[(4,'make'),(1,'sentence'),(0,'this'),(3,'now'),(5,'sense'),(2,'should')] 

def makeList(t):
    result = ''
    t.sort()
    for x, y in t:
        result += y +', '
    result = result[:-2]    
    result = ('[' + ', '.join([result]) + ']')
    return result 

OUTPUT: [this, sentence, should, now, make, sense] 

Ответы [ 2 ]

7 голосов
/ 15 января 2012

Это просто:

sentence = [(4,'make'),(1,'sentence'),(0,'this'),(3,'now'),(5,'sense'),(2,'should')]
print "[%s]" % ', '.join(word for _,word in sorted(sentence))

Здесь следует отметить несколько вещей:

  • Генератор используется в качестве аргумента для join. Синтаксис такой же, как для списочных представлений
  • мы перебираем отсортированный список кортежей и используем _, чтобы указать, что нам не нужно первое значение кортежа (число), а только вторая часть (слово)
  • A Строка формата в стиле C используется для построения окончательной строки с [] вокруг нее. Мы могли бы также использовать str.format здесь, но я думаю, что это выглядит чище (в этом примере)
0 голосов
/ 15 января 2012

Альтернатива Никлас Баумстарк правильный ответ:

>>> sentence = [(4,'make'),(1,'sentence'),(0,'this'),\
... (3,'now'),(5,'sense'),(2,'should')]
>>> [w for t,w in sorted(sentence)]
['this', 'sentence', 'should', 'now', 'make', 'sense']

(Если вы действительно хотите список, чем строка, которая выглядит как список ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...