从元组中提取然后排序

时间:2014-03-14 09:32:56

标签: python

students = [

        ('tiffany', 'A', 15),

        ('jane', 'B', 10),

        ('ben', 'C', 8),

        ('simon', 'A', 21),

        ('john', 'A', 15),

        ('jimmy', 'F', 1),

        ('charles', 'C', 9),

        ('freddy', 'D', 4),

        ('dave', 'B', 12)]

我想要返回一个名字少于6个字符的元组。 ('jane', 'ben', 'simon', 'john', 'jimmy', 'dave') 我的想法是首先过滤,然后使用sorted()

对其进行排序

但是有错误。

x = filter(lambda students: len(students) < 4, students)
sorted(x, key= x, reverse = True)

3 个答案:

答案 0 :(得分:2)

您可以使用生成器表达式过滤掉名称小于6个字符的学生,然后使用sorted对其进行排序,如下所示

print [student[0] for student in students if len(student[0]) < 6]
# ['jane', 'ben', 'simon', 'john', 'jimmy', 'dave']

答案 1 :(得分:1)

当你的输出显然没有排序时,我不知道你为什么要排序。您可以使用tuple对象创建元组。

print tuple(s[0] for s in students if len(s[0]) < 6)

答案 2 :(得分:0)

你必须过滤角色

>>> students
[('tiffany', 'A', 15), ('jane', 'B', 10), ('ben', 'C', 8), ('simon', 'A', 21), ('john', 'A', 15), ('jimmy', 'F', 1), ('charles', 'C', 9), ('freddy', 'D', 4), ('dave', 'B', 12)]
>>> x = filter(lambda student: len(student[0]) < 6, students)
>>> z = sorted(x, key=lambda y:y[0], reverse = True)
>>> [y[0] for y in z]
['simon', 'john', 'jimmy', 'jane', 'dave', 'ben']