我有2d數組,尺寸3x10,我想按第2行中的值排序,從最低值到最高值,任何有用的提示?如何在Python中按行排序二維數組?
回答
Python中,本身不具有 「2D陣列」 - 它具有(1d)的列表作爲內置插件,並且在標準庫模塊array(1D)陣列。有第三方庫,如numpy
,它們提供Python可用的多維數組,但當然如果您使用其中一些第三方庫,那麼您會提到這樣的第三方庫,而不是僅僅說「在Python中」,?右 - )
所以我認爲通過「二維數組」你的意思名單,如名單:
lol = [ range(10), range(2, 12), range(5, 15) ]
或類似物 - 即具有3個項目,每個列表項目是包含10個項目的列表,「第二行」將是子列表項目lol[1]
。是的,很多假設,但你的問題是如此瘋狂地模糊,以至於無法避免做出假設 - 編輯你的Q以更精確地澄清,並且舉一個例子!如果你不喜歡試圖讀你的頭腦的人(可能失敗)因爲你目前無法避免。
所以在這些假設下,你可以排序每一個排序的第二個要求的順序3子列表,例如:
indices = range(10)
indices.sort(key = lol[1].__getitem__)
for i, sublist in enumerate(lol):
lol[i] = [sublist[j] for j in indices]
這裏的一般做法是隻排序指標的範圍,然後使用適當排序的範圍重新排列所有的子列表。
如果你確實有不同的問題,當然會有不同的解決方案;-)。
那麼,如果你在談論標準的Python列表,這很容易:mylist[1].sort()
。例如:
>>> from random import randint
>>> a_list = [[randint(1,15) for _ in range(10)] for _ in range(3)]
>>> print a_list
[[3, 12, 3, 12, 13, 5, 12, 2, 1, 13], [3, 8, 7, 4, 6, 11, 15, 12, 4, 6], [15, 3, 8, 15, 1, 6, 4, 7, 15, 14]]
>>> a_list[1].sort()
>>> print a_list
[[3, 12, 3, 12, 13, 5, 12, 2, 1, 13], [3, 4, 4, 6, 6, 7, 8, 11, 12, 15], [15, 3, 8, 15, 1, 6, 4, 7, 15, 14]]
「2D陣列」的外觀如何?
例如:
>>> a = [
[12, 18, 6, 3],
[ 4, 3, 1, 2],
[15, 8, 9, 6]
]
>>> a.sort(key=lambda x: x[1])
>>> a
[[4, 3, 1, 2],
[15, 8, 9, 6],
[12, 18, 6, 3]]
但我猜你想是這樣的:
>>> a = [
[12, 18, 6, 3],
[ 4, 3, 1, 2],
[15, 8, 9, 6]
]
>>> a = zip(*a)
>>> a.sort(key=lambda x: x[1])
>>> a
[(6, 1, 9),
(3, 2, 6),
(18, 3, 8),
(12, 4, 15)]
>>> a = zip(*a)
>>> a
[(6, 3, 18, 12),
(1, 2, 3, 4),
(9, 6, 8, 15)
]
所需的順序排列子列表,考慮使用'itemgetter(1)'而不是'lambda' – 2010-02-01 03:38:52
而不是使用lambda x: x[1]
可以使用operator.itemgetter爲重點,以排序或排序功能。 itemgetter(n)創建一個從列表中獲取第n個項目的函數。
>>> matrix = [ [4,5,6], [1,2,3], [7,0,9]]
>>> from operator import itemgetter
>>> sorted(matrix, key=itemgetter(1))
[[7, 0, 9], [1, 2, 3], [4, 5, 6]]
這是一個小功能,我寫了這個目的:
def sorted_table(data, column=0, reverse=False):
return sorted(data, cmp=lambda a,b: cmp(a[column], b[column]), reverse=reverse)
其實,我有更多的複雜的要求,這是由兩列對錶進行排序。事實證明,cmp()
功能是相當通用的;這是我的原始功能:
def sort_report(data):
"""Sort report columns: first by value, then by label."""
return sorted(data, cmp=lambda a,b: cmp(b[2], a[2]) or cmp(a[0], b[0])) # label is column 0; value is column 2
b和a在第一種情況下相反,因爲目標是將值從高到低排序。
- 1. 二維Python數組:按第一排序
- 2. Python:按數組長度對二維數組進行排序?
- 3. C - 按一維排序二維數組
- 4. 如何在MATLAB中對第二排排序二維數組?
- 5. 如何在PHP中按長度排序二維數組?
- 6. 按降序排列二維數組vb.net
- 7. Java。二維數組按列排序
- 8. 按日期對二維數組排序
- 9. 在二維數組中按鍵排序數組
- 10. 如何將二維數組(numpy.ndarray)基於python中的第二列進行排序?
- 11. 如何在Apps腳本中對二維數組進行排序
- 12. 如何在MATLAB中對一列進行二維數組排序?
- 13. 如何在C#中對二維數組進行排序?
- 14. 如何在C++中對二維數組進行排序
- 15. 同時對一維數組和二維數組排序(按列)
- 16. 排序二維數組在Perl一排
- 17. 在二維數組中插入排序
- 18. 在PHP中對二維數組排序
- 19. 在Python中按單行/列對三維數組排序
- 20. 排序二維數組PHP
- 21. 對二維數組排序
- 22. 二維數組的排序
- 23. 二維數組單排序
- 24. 排序二維Javascript數組
- 25. 用一行對二維數組排序
- 26. 按字母順序對二維數組進行排序
- 27. Python 3 - 二維數組按多列排序
- 28. 如何從二維數組中填充一維數組,以及如何對一維數組進行排序?
- 29. 如何在二維排序數組中找到中值?例如
- 30. 如何按列降序排列二維數組?
謝謝,你真的很好介意:)))),將來我會更具描述性和確定性。我的「真正的問題」是關於按照第二個 – user257522 2010-02-01 00:04:08