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)
答案 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']