(1)已知有列表 a,想要实现列表 a 根据另一个列表 order 的值进行排序,或者说实现列表根据两一个列表值重排序,实现方法有两种:
参考资料:https://stackoverflow.com/questions/2177590/how-can-i-reorder-a-list
方法1:
In [66]: a
Out[66]: [array([1, 0, 3, 2, 4, 5]), array([4, 1, 2, 3, 5, 0]), array([0, 0, 0])]
In [67]: order
Out[67]: [2, 0, 1]
In [68]: [a[i] for i in order]
Out[68]: [array([0, 0, 0]), array([1, 0, 3, 2, 4, 5]), array([4, 1, 2, 3, 5, 0])]
方法2(数组的排序比较灵活,这个方法可以扩充到其他地方):
In [76]: a
Out[76]: [array([1, 0, 3, 2, 4, 5]), array([4, 1, 2, 3, 5, 0]), array([0, 0, 0])]
In [77]: order
Out[77]: [2, 0, 1]
In [78]: list(np.array(a, dtype=object)[order])
Out[78]: [array([0, 0, 0]), array([1, 0, 3, 2, 4, 5]), array([4, 1, 2, 3, 5, 0])]
(2)列表根据元素长度排序
参考资料:https://www.geeksforgeeks.org/python-sort-list-according-length-elements/
a = np.random.randint(0, 10, (2, 2))
b = np.random.randint(0, 10, (4, 2))
c = np.random.randint(0, 10, (5, 2))
d = np.random.randint(0, 10, (3, 2))
g = [b, a, c, d]
# 根据长度从小到大排序
g2 = sorted(g, key=len)
# 根据长度从大到小排序
g2 = sorted(g, key=len, reverse=True)
(3) 列表按照某个规则排序 (python sort a list according to an regulation)
https://www.geeksforgeeks.org/python-sort-list-according-second-element-sublist/
注意:区分sort和sorted,是否是原地修改列表(in place)
In [9]: a=[('rishav', 10), ('akash', 5), ('ram', 20), ('gaurav', 15)]
In [10]: b=sorted(a, key = lambda x: x[1], reverse=True)
In [11]: a
Out[11]: [('rishav', 10), ('akash', 5), ('ram', 20), ('gaurav', 15)]
In [12]: b
Out[12]: [('ram', 20), ('gaurav', 15), ('rishav', 10), ('akash', 5)]
In [13]: a.sort(key = lambda x: x[1], reverse=True)
In [14]: a
Out[14]: [('ram', 20), ('gaurav', 15), ('rishav', 10), ('akash', 5)]
(4) 对两个列表一起进行排序 (python sort two list in same order)
1 In [197]: a
2 Out[197]: [(38, 750, 574, 788), (39, 301, 575, 559), (39, 182, 254, 281)]
3
4 In [198]: b
5 Out[198]: [(291, 778), (306, 429), (151, 230)]
6
7 In [199]: c, d =zip(*sorted(zip(a, b)))
8
9 In [200]: c
10 Out[200]: ((38, 750, 574, 788), (39, 182, 254, 281), (39, 301, 575, 559))
11
12 In [201]: d
13 Out[201]: ((291, 778), (151, 230), (306, 429))
未完,待续~