Python对list操作的一些小技巧
Python对list操作的一些小技巧
由于要搞数学建模,于是从熟悉已久的C++转战Python。虽然才上手,但是Python的语法糖就让我大呼过瘾。不得不说相比于C/C++,Python对于数据的处理非常方便,仅仅是列表的操作就有许多方便的技巧。现列举如下:
列表推导式
Python可以完成对许多数据结构的宏观操作,比如已知一个列表[1,2,3,4,5],想求得另一个列表。使其每个元素为原列表的两倍,即[2,4,6,8,10]在C/C++语言里,你可能需要遍历原列表所有元素,并将每个元素乘2,依次加入新的列表,而Python具有列表推导式功能,使这个操作异常简单:
list1=[1,2,3,4,5]
list2=[x*2 for x in list1]
print(list2)
#结果是:[2,4,6,8,10]
如果我要筛选原列表里面为奇数的元素,可以如此:
list2=[x for x in list1 if x%2==1]
print(list2)
#结果是[1,3,5]
我们也可以结合函数来使用列表推导式,比如新列表元素为原列表每个元素的平方:
func=lamba x:x**2
list2=[func(x) for x in list1]
print(list2)
#输出是[1,4,9,16,25]
列表推导式也支持布尔值,比如如果我们想判断原列表里面的元素的奇偶性,可以这样:
list2=[x%2==1 for x in list1]
print(list2)
#输出是:[true,false.true,false,true]
map映射结构
不过,对于一些复杂的列表转换,列表推导式就力不从心了,比如我们一直一个人名列表[‘tOm’,‘jacK’,‘RICK’],我们需要把它规范化,即首字母大写,其余字母小写,转化为列表[‘Tom’,‘Jack’,‘Rick’],那么我们怎么做呢?Python提供了map映射结构,让我们可以求得原列表的某种映射列表,比如要处理这个姓名规整问题,我们可以先定义一个规整函数:
def traslation(name):
Name=name[0].upper()+name[1:].lower()
return Name
然后调用map结构,求得map映射,并转换为list结构
names=[‘tOm’,'jacK','RICK']
list2=list(map(traslation,names))
print(list2)
#输出结果为['Tom','Jack','Rick']
注意,map结构的第一个参数是函数名,也可以支持匿名函数,比如这样用:
x=[1,2,3,4,5]
y=list(map(lambda x:x*2,x))
print(y)
#输出结果为:[2,4,6,8,10]
自定义列表排序
Python的列表可以按照你的意愿进行排序,非常方便,格式为×××.sort(key=‘×××’),其中key='×××’中的×××为一个函数(在Python里,函数也是对象),
如果我们想按照字符串长度对一个字符串集进行排序:
b=['saw','small','He','foxes','six']
b.sort(key=len)
print(b)
#输出结果:['He','saw','six','small','foxes']
如果要求稍微复杂一些,我们可以运用匿名函数,比如我们想字符串中不同字母的数量对一个字符串集进行排序:
strings=['foo','card','bar','aaaa'.'abab']
srtings.sort(key=lamba x:len(set(list(x))))
print(strings)
#输出结果:['aaaa','foo','abab','bar','card']
元组构成的列表
在数学建模的过程中,我经常会把一些点坐标的x,y坐标值用不同的列表分开储存,但有时我们有需要把他们合并成一个元素为元素的列表,比如x坐标列表[1,2,3],y坐标列表[4,5,6],我们想得到[(1,4),(2,5),(3,6)],可以这样做:
x=[1,2,3]
y=[4,5,6]
points=zip(x,y)
print(list(points))
#输出结果为:[(1,4),(2,5),(3,6)]
不过拆分的方式略显魔幻
points=[(1,4),(2,5),(3,6)]
x,y=zip(*points)
print(x)
print(y)
#输出为:[1,2,3]
[4,5,6]
好了,我的Python学习分享就在这里,如果在我的学习过程中还发现一些有用的技巧,我还会继续分享的O(∩_∩)O~
Python对list操作的一些小技巧的更多相关文章
- http://www.yyne.com/python使用-urllib-quote-进行-url-编码小技巧/
http://www.yyne.com/python使用-urllib-quote-进行-url-编码小技巧/
- mysql操作sql的小技巧
本篇集中整理一下执行sql的小技巧,这种方式不仅带来了操作上的便捷,也可以保证数据可以数据的安全性. 1:查询数据(保证查询性能) 首先想先解释一下 SELECT * 和 SELECT t.id , ...
- python 设计及调试的一些小技巧
在“笨办法学习python”中介绍了一些设计函数以及调试技巧: 参考网址:http://www.jb51.net/shouce/Pythonbbf/latest/ex36.html If 语句的规则¶ ...
- python 数据结构中被忽视的小技巧
一.一个包含N个元素的字符串.元组.序列.以及任何可迭代对象均可以拆分成N个单独的“变量” 1.字符串的拆分 #字符串 In [10]: s="abdefg" In [11]: o ...
- Python最好IDE:Pycharm使用小技巧总结,让你写代码更为舒适
- Python中Template使用的一个小技巧
Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用. from string import Template s = Template("there ...
- js 操作对象的小技巧
来源:https://www.w3cplus.com/javascript/javascript-tips.html 1.使用...运算符合并对象或数组中的对象 同样使用ES的...运算符可以替代人工 ...
- 今天整理了几个在使用python进行数据分析的常用小技巧、命令。
提高Python数据分析速度的八个小技巧 01 使用Pandas Profiling预览数据 这个神器我们在之前的文章中就详细讲过,使用Pandas Profiling可以在进行数据分析之前对数据进行 ...
- 一些Python的惯用法和小技巧:Pythonic
Pythonic其实是个模糊的含义,没有确定的解释.网上也没有过多关于Pythonic的说明,我个人的理解是更加Python,更符合Python的行为习惯.本文主要是说明一些Python的惯用法和小技 ...
随机推荐
- 主席树铺垫——总区间第k小
题目描述(口糊) 先给定一个长度为n的数列,然后给m次操作,每次输入b,求第b小的数. 样例输入 5 7 4 10 9 23 5 1 2 3 4 5 样例输出 4 7 9 10 23 数据范围及温馨提 ...
- Python3 装饰器解析
第6章 函数 6.1 函数的定义和调用 6.2 参数传递 6.3 函数返回值 6.4 变量作用域 6.5 匿名函数(lambda) 6.6 递归函数 6.7 迭代器 6.8 生成器 6.9 装饰器 6 ...
- Electron-vue 项目搭建
Electron 应用技术体系推荐 目录结构 demo(项目名称) ├─ .electron-vue(webpack配置文件) │ └─ build.js(生产环境构建代码) | └─ dev-cl ...
- Linux指令,更新中
Linux指令 ls 列举文件. ls *.txt:列举所有txt后缀的文件夹. touch 创建文件. $ touch asd.txt fgh.txt $ touch love{1..10}shiy ...
- 【mysql】- 锁篇(上)
回顾 问题 事务并发执行时可能带来各种问题,并发事务访问相同记录的情况大致可以划分为3种 读-读情况:即并发事务相继读取相同的记录 读取操作本身不会对记录有什么影响,并不会引起什么问题,所以允许这种情 ...
- GitHub和码云gitee及远程仓库管理
目录 备注: 知识点 GitHub 码云(gitee.com) gitee的使用 本地版本库关联多个远程库 备注: 本文参考于廖雪峰老师的博客Git教程.依照其博客进行学习和记录,感谢其无私分享,也欢 ...
- 二分图&网络流初步
链接 : 最小割&网络流应用 EK太低级了,不用. 那么请看:#6068. 「2017 山东一轮集训 Day4」棋盘,不用EK你试试? dinic模板及部分变形应用见zzz大佬的博客:网络流学 ...
- Django安装与简单配置(1)
目录 1. 环境准备 2. 开始安装 2.1 安装Django 2.2 安装 Mysql数据库 3. 开始配置 3.1 Django简单配置 3.1.1 创建一个工程(project)为devops: ...
- [leetcode/lintcode 题解] 谷歌面试题:找出有向图中的弱连通分量
请找出有向图中弱连通分量.图中的每个节点包含 1 个标签和1 个相邻节点列表.(有向图的弱连通分量是任意两点均有有向边相连的极大子图) 将连通分量内的元素升序排列. 在线评测地址:https://ww ...
- 面试题六十:n个骰子的点数
把n个骰子扔在地上,求出现和为s的概率 可得n<=s<=6n 方法:定义6n-n+1长度的数组,然后对所有可能出现的组合进行计算,把结果进行计数存进数组:递归 方法二:动态规划,大问题小化 ...