当前位置: 代码迷 >> python >> 从元组中提取然后排序
  详细解决方案

从元组中提取然后排序

热度:43   发布时间:2023-07-14 09:48:34.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)]

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

但是有一个错误。

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

您可以使用生成器表达式来筛选名称少于6个字符的学生,然后使用sorted对他们进行sorted ,如下所示

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

当您的输出显然没有排序时,我不知道为什么要排序。 您可以使用tuple对象创建元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']
  相关解决方案