python list排序参数实现二维数组按照第2列排序

list 的sort方法是将list里面的数据直接排序,排序后,list的数据顺序会变化。

而如果list是一个二维数组,也就是list 的list,想按照第2列排序,怎么做?就是说,list是以下的矩阵形式:

list[0]: [4,2]
list[1]: [3,1]
list[2]: [5,0]
list[3]: [1,6]

注意到sort自己的参数就有提及:

list.sort(cmp=None, key=None, reverse=False)

参数定义

key定义按照哪一个元素排序。如果对于列表中的元素,可以选择其他的跟元素list[i]有关的值,则key可以是一个作用于list[i]的函数。比如:

def take2(elem):
    return elem[1]
list1 =[(4,2),(3,1),(5,0), (1,6)]
list1.sort(key = take2)

print(list1)
>>[(5, 0), (3, 1), (4, 2), (1, 6)]

这里,list[i]是一个tuple,elem[1]返回第二个元素。则sort会按照第2个元素来排序,是不是很方便啊?

python 2中,cmp是一个callable的函数。如果用个lambda算子来写最基础的升序排序,就是:

lambda x,y: x-y

这里,x-y在x>y时返回正值,cmp是正返回值时,交换两个元素,则最后就是一个升序排序。

如果这个函数一直返回True,则不排序,list还是原list。

但是注意,python 3里面取消了sort的cmp参数了。它的定义是:

L.sort(key=None, reverse=False) -> None

 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用提供了一种排序二维数组的方法。可以按照以下步骤进行操作: 1. 创建一个二维数组,数组中的每个元素都是一个一维数组,代表二维数组的行。 2. 使用内置的排序API对这个二维数组进行排序排序的依据是一维数组的第一的升序。 3. 如果第一相同,可以使用降序来排序第二列。 引用提供了一个通用的算法来排序二维数组。可以使用lambda函数作为比较函数,参数是两个一维数组,代表待比较的两行。比较方式是先比较第一的元素,如果相同,则比较第二列的元素。返回值是一个bool型值,表示比较结果。可以根据这个算法来实现按照第一升序排的需求。 因此,如果要按照二维数组的第一进行排序,可以使用以上两种方法之一来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C/C++ 二维数组第一升序,第一相同第二列降序](https://blog.csdn.net/weixin_39956356/article/details/112980173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [python list排序参数实现二维数组按照第2排序](https://blog.csdn.net/tjzzy/article/details/99619120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值