从元组中提取然后排序


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)

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

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

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

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

你必须过滤字符

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

最新更新