我有一個從上午8點到下午7點的字符串格式的列表。 am/pm沒有指定,並且使用24小時時鐘不是選項。我想按時間對這個列表進行排序,但是我在時鐘觸發之後遇到問題,因爲數字排序從一開始,儘管事實上8-12實際上是在時間之前。我想我可以創建一個新的元組列表,我通過一個函數將時間轉換爲更合適的數字,對它進行排序,並在需要的函數中使用元組的第一個元素。這看起來似乎有用,但我擔心我可能會錯過更優雅和更基本的東西。我是嗎?列表的複雜排序
Q
列表的複雜排序
4
A
回答
5
使用key
參數至list.sort()
或sorted()
函數提供一個值進行排序。
values.sort(key=somefunction)
其中somefunction
帶一個參數(要轉換的值)。
該列表將根據key
參數的返回值進行排序,但原始值本身保持不變。
對於你的問題,你就可以使用:
def daytime(val):
hour, min = map(int, val.split(':'))
if hour < 8:
hour += 12
return hour, min
這將改變8:01
到(8, 1)
和6:25
到(18, 25)
,造成.sort()
或sorted()
排序8:01
前6:25
:
>>> sorted(['1:14', '8:01', '12:46', '6:25'], key=daytime)
['8:01', '12:46', '1:14', '6:25']
見Python Sorting HOWTO欲瞭解更多詳情和提示(使用此Google cache link直到wiki.python.org
已從最近的security exploit中恢復)。
4
函數to_minutes
將字符串轉換爲整數小時和分鐘,並計算從8:00開始的分鐘數,在8:00之前添加12小時。然後根據這個數分鐘的排序:
def to_minutes(s):
h,m = map(int, s.split(':'))
return ((h - 8) % 12) * 60 + m
a = ['1:45', '8:00', '6:15', '12:30']
print sorted(a, key=to_minutes)
打印
['8:00', '12:30', '1:45', '6:15']
相關問題
- 1. 按字母順序排列複雜對象的排列列表
- 2. Excel按列排序複雜表
- 3. 複雜的排序字典到排序列表
- 4. 複雜的排序
- 5. 複雜的排序
- 6. 複雜類型與序列排列
- 7. 排序複雜的JavaScript陣列
- 8. 按兩列排序的SQL複雜
- 9. 堆排序複雜
- 10. Mongo複雜排序?
- 11. 複雜的排序HTML表格
- 12. Solr的 - 複雜的排序
- 13. 複雜的字典排序
- 14. Django中的複雜排序
- 15. LINQ - 複雜的排序
- 16. 複雜的排序SQL
- 17. Mysql的複雜排序
- 18. 複雜的數據排序
- 19. Django中的複雜排序
- 20. 複雜的排序方法
- 21. 複雜的排序PHP
- 22. PHP排序一系列複雜
- 23. 按值排序複雜數組陣列
- 24. Django的排序列表 - 複雜的查詢
- 25. 保持排序列表的複雜性vs插入所有值然後排序
- 26. 字符串進行排序的複雜列表蟒蛇
- 27. 基於屬性的複雜排序對象列表
- 28. C#的空間複雜性排序字符串列表
- 29. 複雜性,產生排列
- 30. 複雜排列/組合
爲什麼不只是存儲的數字的格式,更適合於排序,然後將它們轉換上飛?一個自然的選擇是'日期時間'對象。 –