将许多列表拆分为2个包含字符串和数字的部分

时间:2015-04-09 18:13:07

标签: sorting python-3.x

我有一个CSV文件,如下所示:

        Hussain 1       0       0       3

我设法将所有列表创建为行:生成的列表如下:

['Hussain', '1', '0', '0', '3']

我希望能够对它们进行排序,以便按字母顺序打印名称以及每个人的最高分:另一个注意事项是第1个数字将被排除,因为这是学生的课程1,2和3中的数字,而不是他们得分的一部分。需要打印特定类中的人员,因为用户将决定他们要分类的类:

如果用户说第1类,程序应该打印:

Hussain:3

我很感激任何帮助,因为我一直在努力解决这部分代码,尽管我已经在很长一段时间内一直在努力。谢谢

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

tuples = [['Hussain', '1', '0', '0', '3'], ['Bon', '2', '1', '2', '3'], ['Alice', '1', '5', '2', '3'], ['Josh', '3', '1', '7', '10'], ['Jack', '2', '0', '8', '9'], ['Zyra', '3', '5', '1', '6']]

class_to_sort = 1

# reduce to classes that are requested by user
tuples = filter(lambda tuple: int(tuple[1]) == class_to_sort, tuples)

# sort the tuples
tuples = sorted(tuples, key=lambda tuple: tuple[0])

# throw out second column and converts strings to integers
tuples = [[tuple[0]] + map(int, tuple[2:]) for tuple in tuples]

# throw out all integers that aren't the maximum per tuple
tuples = [[tuple[0]] + [max(tuple[1:])] for tuple in tuples]

print tuples

输出[名称,最高分数]列表,然后您可以随意使用:

[['Alice', 5], ['Hussain', 3]]