python 列表排序(python list sort)

 

(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)

https://stackoverflow.com/questions/9764298/how-to-sort-two-lists-which-reference-each-other-in-the-exact-same-way

 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))

 未完,待续~

 

  

原文地址:https://www.cnblogs.com/ttweixiao-IT-program/p/14537455.html