python实现嵌套列表按指定位置元素排序、按子列表长度、子列表之和、绝对值和、最大/最小值排序

      python的编程使用过程中,list列表结构我想是必不可少的,这也是python里面非常非常重要的一种数据结构,list可以用来模拟Queue队列还可以用来模拟Stack堆栈等等,非常的强大,今天在使用列表的时候有一个需求就是需要对嵌套列表进行排序,什么是嵌套列表呢,简单来说就是:列表内的元素也是列表,对于这样的列表对象我一般习惯称之为“嵌套列表”,当然如果只嵌套一层的话你也可以叫它矩阵。

      对于列表的排序,可以使用python内置的sort或者是sorted函数来快速地实现升序或者是降序的排序,但是对于嵌套列表这样的方法不能够直接使用了,因为在python中列表本身不是可直接比较的对象,sort和sorted就无法直接使用了,但是,无法直接使用并不代表不能使用,下面是我的具体实践,都很简单,觉得有必要总结一下,就在这里贴一下代码:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division

'''
__Author__:沂水寒城
功能:  嵌套列表排序
'''

import operator


def sortFunc1(data_list,index=-3):
    '''
    借助于 operator 模块实现排序
    '''
    data_list.sort(key=operator.itemgetter(index)) 
    print '======================= sorted data_list ==================='
    print data_list


def sortFunc2(data_list,index=-3):
    '''
    基于内置函数 sorted  实现排序
    '''
    data_list=sorted(data_list,key=lambda i:i[index])
    print '======================= sorted data_list ==================='
    print data_list
    data_list.sort(key=lambda i:i[index], reverse=True)
    print '======================= sorted data_list ==================='
    print data_list


def sortFunc3(data_list):
    '''
    依据列表中元素的数量来排序
    '''
    data_list=sorted(data_list,key=lambda i:len(i))
    print '======================= sorted data_list ==================='
    print data_list


def sortFunc4(data_list):
    '''
    依据列表中元素总和来排序
    '''
    data_list=sorted(data_list,key=lambda i:sum(i))
    print '======================= sorted data_list ==================='
    print data_list


def sortFunc5(data_list):
    '''
    依据列表中元素绝对值的总和来排序
    '''
    data_list=sorted(data_list,key=lambda i:sum([abs(one) for one in i]))
    print '======================= sorted data_list ==================='
    print data_list


def sortFunc6(data_list):
    '''
    依据列表中元素最大值来排序
    '''
    data_list=sorted(data_list,key=lambda i:max(i))
    print '======================= sorted data_list ==================='
    print data_list


def sortFunc7(data_list):
    '''
    依据列表中元素最小值来排序
    '''
    data_list=sorted(data_list,key=lambda i:min(i))
    print '======================= sorted data_list ==================='
    print data_list


if __name__=='__main__':
    data_list=[['A',2,3,'apple','p',45,9],['D',23,13,'orange','q',23,19],['C',12,3,'banana','s',22,29],['E',42,23,'water','p',14,98],
               ['F',2,3,'snow','k',5,8],['G',12,43,'rain','m',41,12],['L',12,33,'ice','n',15,19],['O',12,13,'cream','b',31,25]]

    sortFunc1(data_list,index=-3)
    sortFunc2(data_list,index=-3)


    data_list=[['E',42,12,23,'p',14,98],['A','p',45,9],['D',13,'orange','q',23,19],['C',3,'s',22,29],['E',42,12,23,'water','p',14,98]]
    sortFunc3(data_list)


    data_list=[[42,12,23,14,98],[45,9],[13,-100,3,19],[6,3,-5,22,29],[42,12,23,14,98]]
    sortFunc4(data_list)
    sortFunc5(data_list)
    sortFunc6(data_list)
    sortFunc7(data_list)

       结果如下:

======================= sorted data_list ===================
[['O', 12, 13, 'cream', 'b', 31, 25], ['F', 2, 3, 'snow', 'k', 5, 8], ['G', 12, 43, 'rain', 'm', 41, 12], ['L', 12, 33, 'ice', 'n', 15, 19], ['A', 2, 3, 'apple', 'p', 45, 9], ['E', 42, 23, 'water', 'p', 14, 98], ['D', 23, 13, 'orange', 'q', 23, 19], ['C', 12, 3, 'banana', 's', 22, 29]]
======================= sorted data_list ===================
[['O', 12, 13, 'cream', 'b', 31, 25], ['F', 2, 3, 'snow', 'k', 5, 8], ['G', 12, 43, 'rain', 'm', 41, 12], ['L', 12, 33, 'ice', 'n', 15, 19], ['A', 2, 3, 'apple', 'p', 45, 9], ['E', 42, 23, 'water', 'p', 14, 98], ['D', 23, 13, 'orange', 'q', 23, 19], ['C', 12, 3, 'banana', 's', 22, 29]]
======================= sorted data_list ===================
[['C', 12, 3, 'banana', 's', 22, 29], ['D', 23, 13, 'orange', 'q', 23, 19], ['A', 2, 3, 'apple', 'p', 45, 9], ['E', 42, 23, 'water', 'p', 14, 98], ['L', 12, 33, 'ice', 'n', 15, 19], ['G', 12, 43, 'rain', 'm', 41, 12], ['F', 2, 3, 'snow', 'k', 5, 8], ['O', 12, 13, 'cream', 'b', 31, 25]]
======================= sorted data_list ===================
[['A', 'p', 45, 9], ['C', 3, 's', 22, 29], ['D', 13, 'orange', 'q', 23, 19], ['E', 42, 12, 23, 'p', 14, 98], ['E', 42, 12, 23, 'water', 'p', 14, 98]]
======================= sorted data_list ===================
[[13, -100, 3, 19], [45, 9], [6, 3, -5, 22, 29], [42, 12, 23, 14, 98], [42, 12, 23, 14, 98]]
======================= sorted data_list ===================
[[45, 9], [6, 3, -5, 22, 29], [13, -100, 3, 19], [42, 12, 23, 14, 98], [42, 12, 23, 14, 98]]
======================= sorted data_list ===================
[[13, -100, 3, 19], [6, 3, -5, 22, 29], [45, 9], [42, 12, 23, 14, 98], [42, 12, 23, 14, 98]]
======================= sorted data_list ===================
[[13, -100, 3, 19], [6, 3, -5, 22, 29], [45, 9], [42, 12, 23, 14, 98], [42, 12, 23, 14, 98]]

      在日常的使用中,需要什么样的功能都可以基于上述的几个示例函数来进行改造,个人觉得还是比较方便的。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值