比排序元组提供的更优雅的解决方案?

时间:2012-01-14 20:44:36

标签: python sorting tuples

我正在研究一个关于元组的噱头问题并最终解决了......但我觉得我的编码真的很难看。有没有pythonic /更简单的方法?基本上,这个问题给你一个元组,你需要对元组进行排序,从同一个元组中删除数字,然后创建一个这样的输出。

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

一开始,你有......

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 个答案:

答案 0 :(得分:7)

这很简单:

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

这里有几点需要注意:

  • generator用作join的参数。语法与list comprehensions
  • 的语法相同
  • 我们遍历排序的元组列表并使用_表示我们不需要元组的第一个值(数字),而只需要第二个部分(单词)
  • C-style format string用于构建围绕它的[]的最终字符串。我们也可以在这里使用str.format,但我觉得它看起来更干净(在这个例子中)

答案 1 :(得分:0)

替代Niklas Baumstark正确答案:

>>> 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']

(如果你真的想要一个列表而不是一个看起来像列表的字符串......)