4

我有列表["Tue", "Wed", "Mon", "Thu", "Fri"]作为列表,我想将其设为 ["Mon", "Tue", "Wed", "Thu", "Fri"].

这个怎么排序?

4

3 回答 3

12

效率不是很高,但如果你有一个他们应该在的顺序列表......

>>> m = ["Mon", "Tue", "Wed", "Thu", "Fri"]
>>> n = ["Tue", "Wed", "Mon", "Thu", "Fri", "Tue", "Mon", "Fri"]
>>> sorted(n, key=m.index)
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri']

请注意,如果某个值存在于 中,那么这将引发n异常m

或者将它们放入以名称为键并以顺序为值的字典中,然后key=your_dict.get用作键...例如:

>>> d = {name:val for val, name in enumerate(m)}
>>> d
{'Fri': 4, 'Thu': 3, 'Wed': 2, 'Mon': 0, 'Tue': 1}
>>> sorted(n, key=d.get)
['Mon', 'Mon', 'Tue', 'Tue', 'Wed', 'Thu', 'Fri', 'Fri']

这不会引发异常(在 Py3.x 上尝试排序时会出现错误除外None),但您可以使用 partial to sensible, sort before or after default,或获得等效行为list.index, usekey=d.__getitem__或相似的

于 2012-12-12T16:44:07.037 回答
2

查找并用 1 替换星期一的所有实例,用 2 替换星期二的所有实例,等等排序、重新分配。

于 2012-12-12T16:42:39.553 回答
0

http://wiki.python.org/moin/HowTo/Sorting/

您正在寻找词汇排序。作为学习事项,编写自己的函数也很有趣;)

编辑:好的,你只需要一个函数,在一天内返回它的星期几。您可以在函数中简单地使用天字符串数组,然后使用天数周数对元素进行排序,就像老板一样。

于 2012-12-12T16:29:51.547 回答