以下内容来自hackerrank上的一个讨论

题目:

先输入一个整数(2~5)表示学生数,再连续输入学生姓名和成绩,输出成绩第二低的学生姓名。

示例输入:

1
2
3
4
5
6
7
8
9
10
11
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39

示例输出:

1
2
Berry
Harry

中间过程得到的一个list:

1
students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]

1
2
3
4
5
6
marksheet = []
for _ in range(0,int(input())):
marksheet.append([input(), float(input())])

second_lowest = sorted(list(set([marks for name, marks in marksheet])))[1]
print('\n'.join([a for a,b in sorted(marksheet) if b == second_lowest]))

这是第一个人给出的解法,我刚看到觉得不错了,但是当我看到第二个人的解法才瞬间感觉到什么才 叫做pythonic

1
2
3
4
5
n = int(input())
marksheet = [[input(), float(input())] for _ in range(n)]

second_lowest = sorted(list(set([marks for name, marks in marksheet])))[1]
print('\n'.join([a for a,b in sorted(marksheet) if b == second_lowest]))

第二个人对第一个人的marksheet的录入进行了简化,简化到只有一行。

特别是他讲的一句话让我感触很大,python写代码就是要精简,如果长过了50行,你将很难Debug。

原文在这。

1
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.