时间:2021-05-22
本文实例讲述了Python列表解析操作。分享给大家供大家参考,具体如下:
Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list。
列表解析,又叫列表推导式( list comprehension)
列表解析比 for 更精简,运行更快,特别是对于较大的数据集合
列表解析可以替代绝大多数需要用到 map和 filter的场合
列表推导式提供了一个创建链表的简单途径,无需使用 map() , filter() 以及 lambda 。以定义方式得到列表通常要比使用构造函数创建这些列表更清晰。每一个列表推导式包括在一个 for 语句之后的表达式,零或多个 for 或 if 语句。返回值是由 for 或 if 子句之后的表达式得到的元素组成的列表。如果想要得到一个元组,必须要加上括号。
基本
>>> [x for x in range(5)] # [0, 1, 2, 3, 4]l1 = [1,2,3,4][ x*2 for x in l1] #[2,4,6,8]多个值的
[ '%s = %s' for (k, v) in a_map.items()]两次循环
>>> l1 = [1,2,3,4]>>> l2 = [1,2,3,4]>>> [x+y for x in l1 for y in l2][2, 3, 4, 5, 3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8]可以调用函数
[ func(x) for x in l1] #等价于map注意,列表解析不会改变原有列表的值,会创建新的list
交换行列
[ [row[i] for row in mat] for i in (0,1,2)] #[[1, 4, 7], [2, 5, 8], [3, 6, 9]]1.根据索引取元素时,需要进行边界检查 IndexError 切片取,不需要,超过边界不会异常
2.在迭代中修改列表 注意,不安全,不建议这么干 但是可以 for i in l1[:]: l1.insert()……
3.多个list合成一个 就是
['a','b',.....],['a','b'.....]['a','b'.....]变为
['a','b',.....,'a','b'.....'a','b'.....]处理
>>> sum ([[ 'a', 'b' ],['a' , 'b'],[ 'a' ,'b' ]], [])['a' , 'b' , 'a', 'b' , 'a' , 'b']>>> list (itertools .chain([ 'a' ,'b' ],[ 'a', 'b' ],['a' , 'b']))['a' , 'b' , 'a', 'b' , 'a' , 'b']4.关于堆栈和队列
通过上面的操作,可以发现,很轻易可以拿列表当做堆栈或者队列使用
当然,他们有自己的模块,可以查相关库
5.序列相关模块
array 一种受限制可变序列类型,要求所有元素必须是相同类型
copy 提供浅拷贝和深拷贝的能力
operator 包含函数调用形式的序列操作符,如 operator.concat(m,n) 相当于m+n
re 正则表达式
types 包含Python 支持的所有类型
collections 高性能容器数据类型
更多关于Python相关内容可查看本站专题:《Python列表(list)操作技巧总结》、《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:[exprforiter_variniterable][exprforiter
前2种方法主要用到了列表解析,性能稍差,而最后一种使用的时候生成器表达式,相比列表解析,更省内存列表解析和生成器表达式很相似:列表解析[exprforiter_
实验结论如果需要在循环结束后获得结果,推荐列表解析;如果不需要结果,直接使用for循环,列表解析可以备选;除了追求代码优雅和特定规定情境,不建议使用map如果不
列表解析——用来动态地创建列表[exprforiter_variniterableifcond_expr]例子一:map(lambdax:x**2,range(
用习惯列表解析之后会觉得超级酷,所以在尝试使用列表解析,把循环什么的写在一行里面。使用if的时候什么时候必须要有else,什么时候可以没有else一直没搞明白,