Python 列表 使用技巧

CuterCorley
• 阅读 1755

@[toc]

1.列表表达式与列表排序

列表中的元素也是可迭代的对象如列表、元组等时,要根据这些元素的某个子元素对列表排序,常规排序方式失效,需要用sorted()函数并指定key。 题目:

输入一组数到列表nums,请找到列表中任意两个元素相加能够等于9的元素,形成一个元组,使其小数在前大数在后,如:(2,7),(1,8)。重复的元组元素只保留一个,结果按元组第一个元素从小到大顺序输出。 【样例输入】

numbers:3,4,5,7,2,8,1

【样例输出】

[(1, 8), (2, 7), (4, 5)]

示例解答如下:

def get_tuple(num_list):
    temp_list = []
    for i in num_list:
        if (9 - i) in num_list:
            min = (9 - i) if (i >= (9 - i)) else i
            max = i if min == (9 - i) else (9 - i)
            if (min,max) not in temp_list:
                temp_list.append((min,max))
    return temp_list

nums = input()
num_list = [int(i) for i in nums.split(',')]

result_list = get_tuple(num_list)
result_list = sorted(result_list,key=lambda i:i[0])

print(result_list)

代码运行演示如下: Python 列表 使用技巧 说明: [int(i) for i in nums.split(',')]是列表表达式,有更高的执行效率; sorted(result_list,key=lambda i:i[0])对列表进行排序,因为列表中有多个元素,要根据每个元素的第一个子元素来排序,必须使用key来指定排序所依据的元素,同时还是用了lambda表达式,给定一个元素,返回第一个子元素。

2.按照子列表中的某个元素对列表进行排序

例如,有一个列表unsorted_list = [['a', 'b', 'c', 5, 'd'], ['e', 'f', 'g', 3, 'h'], ['i', 'j', 'k', 4, 'm']],需要按照每个子列表中的第4个元素(即整数)对列表进行排序,有3种方式: 方式一——使用lambda表达式

unsorted_list = [['a', 'b', 'c', 5, 'd'], ['e', 'f', 'g', 3, 'h'], ['i', 'j', 'k', 4, 'm']]
sorted_list = sorted(unsorted_list, key=lambda x: x[3])
print(unsorted_list)
print(sorted_list)

打印:

[['a', 'b', 'c', 5, 'd'], ['e', 'f', 'g', 3, 'h'], ['i', 'j', 'k', 4, 'm']]
[['e', 'f', 'g', 3, 'h'], ['i', 'j', 'k', 4, 'm'], ['a', 'b', 'c', 5, 'd']]

显然,得到了排序后的新列表; 其中,lambda表达式返回每个子列表的第4个元素,sorted函数使用lambda表达式的返回值作为key来对列表排序。

方式二——使用itemgetter类

from operator import itemgetter
unsorted_list = [['a', 'b', 'c', 5, 'd'], ['e', 'f', 'g', 3, 'h'], ['i', 'j', 'k', 4, 'm']]
sorted_list = sorted(unsorted_list, key=itemgetter(3), reverse=True)
print(unsorted_list)
print(sorted_list)

打印:

[['a', 'b', 'c', 5, 'd'], ['e', 'f', 'g', 3, 'h'], ['i', 'j', 'k', 4, 'm']]
[['a', 'b', 'c', 5, 'd'], ['i', 'j', 'k', 4, 'm'], ['e', 'f', 'g', 3, 'h']]

显然,得到了排序的结果; 可以用reverse参数使结果倒序。

方式三——调用列表的sort()方法

unsorted_list = [['a', 'b', 'c', 5, 'd'], ['e', 'f', 'g', 3, 'h'], ['i', 'j', 'k', 4, 'm']]
print(unsorted_list)
unsorted_list.sort(key=lambda x: x[3])
print(unsorted_list)

显然,得到了正确的排序结果; 调用sort()方法是对原列表排序,不会产生新的列表。

3.快速生成嵌套列表

需要生成列表如下:

[[1, 2, 3, 4, 5, 6, 7, 8],
 [9, 10, 11, 12, 13, 14, 15, 16],
 [17, 18, 19, 20, 21, 22, 23, 24],
 [25, 26, 27, 28, 29, 30, 31, 32],
 [33, 34, 35, 36, 37, 38, 39, 40],
 [41, 42, 43, 44, 45, 46, 47, 48],
 [49, 50, 51, 52, 53, 54, 55, 56],
 [57, 58, 59, 60, 61, 62, 63, 64]]

显然,这是一个8×8的嵌套列表,并且元素逐渐递增,如果手动输入肯定很麻烦,因此可以使用列表推导式,并且是嵌套列表推导式,如下:

ls = [[j for j in range(i, i+8)] for i in range(1, 64, 8)]
print(ls)

即可实现。

本文原文首发来自博客专栏Python实战,由本人转发至https://www.helloworld.net/p/6JmTrDTw9Ig9,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/105475176查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
2年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
8个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这