擅长:python、mysql、java
<p>其中一个错误是你没有正确检查相等性。当<code>c[1] < d[1]</code>和<code>c[0] < d[0]</code>时返回什么?答案是零,这是不正确的。您还应该在sort中声明<code>cmp</code>参数。你可以做的是:</p>
<pre><code>seasons = {
'Spring': 1,
'Summer': 2,
'Fall': 3,
'Winter': 4,
}
def lcmp(a, b):
a_season, a_year = a.split()
b_season, b_year = b.split()
return int(b_year) - int(a_year) or seasons[a_season] - seasons[b_season]
l = ['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008']
l.sort(cmp=lcmp)
</code></pre>
<p>结果:</p>
^{pr2}$
<p>如果你想玩迭代器:</p>
<pre><code>from itertools import ifilter, izip
def lcmp(a, b):
it = (
f(y) - f(x)
for x, y, f in izip(
reversed(a.split()),
reversed(b.split()),
(int, lambda _: -seasons[_])
)
)
return next(ifilter(None, it), 0)
</code></pre>