我有一份“季节-年份”表:
['Fall 2014', 'Spring 2015', 'Fall 2008', 'Spring 2008']
排序后,列表应该如下所示:
['Spring 2015', 'Fall 2014', 'Spring 2008', 'Fall 2008']
因此,排序规则如下:
第一次按年份排序
按季节排序:“春季”然后“秋季”
我现在有一个名为lcmp
的函数,我在我的列表中使用如下:myList.sort(lcmp)
。在
>>> def lcmp(a,b):
... c = a.split()
... d = b.split()
... if(c[1]>d[1]):
... if(c[0]>d[0]):
... return 1
... else:
... return -1
... else:
... if(c[0]>d[0]):
... return 1
... else:
... return 0
...
这适用于按年份排序,但不适用于季节,尽管我已经指定了这种排序类型。为什么会这样?在
还应考虑比较值相等的情况:
然后可以使用
myList.sort(lcmp)
或myList.sort(cmp=lcmp)
对数据进行排序其中一个错误是你没有正确检查相等性。当
c[1] < d[1]
和c[0] < d[0]
时返回什么?答案是零,这是不正确的。您还应该在sort中声明cmp
参数。你可以做的是:结果:
^{pr2}$如果你想玩迭代器:
只需使用
-year
将sort by year反转为第一个键,seas != "Spring"
的结果使用key=sort_function
来打破联系。在即使使用
myList.sort(key=lcmp)
,函数也无法工作,因为您传递的是单个字符串,因此没有a和b可拆分。这也适用于Python2或3。在相关问题 更多 >
编程相关推荐