跟老齐学Python之有容乃大的list(2)


Posted in Python onSeptember 15, 2014

对list的操作

合并list

《有容乃大的list(1)》中,对list的操作提到了list.append(x),也就是将某个元素x 追加到已知的一个list后边。

除了将元素追加到list中,还能够将两个list合并,或者说将一个list追加到另外一个list中。按照前文的惯例,还是首先看官方文档中的描述:

list.extend(L)
Extend the list by appending all the items in the given list; equivalent to a[len(a):] = L.
向所有正在学习本内容的朋友提供一个成为优秀程序员的必备:看官方文档,是必须的。

官方文档的这句话翻译过来:

通过将所有元素追加到已知list来扩充它,相当于a[len(a)]= L
英语太烂,翻译太差。直接看例子,更明白

>>> la
[1, 2, 3]
>>> lb
['qiwsir', 'python']
>>> la.extend(lb)
>>> la
[1, 2, 3, 'qiwsir', 'python']
>>> lb
['qiwsir', 'python']

上面的例子,显示了如何将两个list,一个是la,另外一个lb,将lb追加到la的后面,也就是把lb中的所有元素加入到la中,即让la扩容。

学程序一定要有好奇心,我在交互环境中,经常实验一下自己的想法,有时候是比较愚蠢的想法。

>>> la = [1,2,3]
>>> b = "abc"
>>> la.extend(b)
>>> la
[1, 2, 3, 'a', 'b', 'c']
>>> c = 5
>>> la.extend(c)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

从上面的实验中,看官能够有什么心得?原来,如果extend(str)的时候,str被以字符为单位拆开,然后追加到la里面。

如果extend的对象是数值型,则报错。

所以,extend的对象是一个list,如果是str,则python会先把它按照字符为单位转化为list再追加到已知list。

不过,别忘记了前面官方文档的后半句话,它的意思是:

>>> la
[1, 2, 3, 'a', 'b', 'c']
>>> lb
['qiwsir', 'python']
>>> la[len(la):]=lb
>>> la
[1, 2, 3, 'a', 'b', 'c', 'qiwsir', 'python']

list.extend(L) 等效于 list[len(list):] = L,L是待并入的list

list的长度

还记得str的长度怎么获得吗?其长度是什么含呢?那种方法能不能用在list上面呢?效果如何?

做实验:

>>> name = 'qiwsir'
>>> type(name)
<type 'str'>
>>> len(name)
6
>>> lname = ['sir','qi']
>>> type(lname)
<type 'list'>
>>> len(lname)
2
>>> length = len(lname)
>>> length
2
>>> type(length)
<type 'int'>

实验结论:

len(x),对于list一样适用
得到的是list中元素个数
返回值是int类型
list中某元素的个数

上面的len(L),可得到list的长度,也就是list中有多少个元素。python的list还有一个操作,就是数一数某个元素在该list中出现多少次,也就是某个元素有多少个。官方文档是这么说的:

list.count(x)
Return the number of times x appears in the list.
一定要不断实验,才能理解文档中精炼的表达。

>>> la = [1,2,1,1,3]
>>> la.count(1)
3
>>> la.append('a')
>>> la.append('a')
>>> la
[1, 2, 1, 1, 3, 'a', 'a']
>>> la.count('a')
2
>>> la.count(2)
1
>>> la.count(5)   #NOTE:la中没有5,但是如果用这种方法找,不报错,返回的是数字0
0

元素在list中的位置

《有容乃大的list(1)》中已经提到,可以将list中的元素,从左向右依次从0开始编号,建立索引(如果从右向左,就从-1开始依次编号),通过索引能够提取出某个元素,或者某几个元素。就是如这样做:

>>> la
[1, 2, 3, 'a', 'b', 'c', 'qiwsir', 'python']
>>> la[2]
3
>>> la[2:5]
[3, 'a', 'b']
>>> la[:7]
[1, 2, 3, 'a', 'b', 'c', 'qiwsir']

如果考虑反过来的情况,能不能通过某个元素,找到它在list中的编号呢?

看官的需要就是python的方向,你想到,python就做到。

>>> la
[1, 2, 3, 'a', 'b', 'c', 'qiwsir', 'python']
>>> la.index(3)
2
>>> la.index('a')
3
>>> la.index(1)
0
>>> la.index('qi')   #如果不存在,就报错
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 ValueError: 'qi' is not in list
>>> la.index('qiwsir')
6

list.index(x),x是list中的一个元素,这样就能够检索到该元素在list中的位置了。这才是真正的索引,注意那个英文单词index。

依然是上一条官方解释:

list.index(x)
Return the index in the list of the first item whose value is x. It is an error if there is no such item.
是不是说的非常清楚明白了?

先到这里,下讲还继续有容乃大的list.

Python 相关文章推荐
Python内置函数之filter map reduce介绍
Nov 30 Python
Python实现二叉堆
Feb 03 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 Python
python邮件发送smtplib使用详解
Jun 16 Python
python3.5基于TCP实现文件传输
Mar 20 Python
python对于requests的封装方法详解
Jan 03 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
Python常用模块之requests模块用法分析
May 15 Python
Python实现线性插值和三次样条插值的示例代码
Nov 13 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
跟老齐学Python之有容乃大的list(1)
Sep 14 #Python
跟老齐学Python之一个免费的实验室
Sep 14 #Python
跟老齐学Python之从if开始语句的征程
Sep 14 #Python
跟老齐学Python之眼花缭乱的运算符
Sep 14 #Python
跟老齐学Python之玩转字符串(3)
Sep 14 #Python
跟老齐学Python之玩转字符串(2)
Sep 14 #Python
跟老齐学Python之玩转字符串(1)
Sep 14 #Python
You might like
基于mysql的论坛(4)
2006/10/09 PHP
php木马攻击防御之道
2008/03/24 PHP
Javascript常考语句107条收集
2010/03/09 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
Promise扫盲贴
2019/06/24 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
详解Python中for循环的使用方法
2015/05/14 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
工厂采购员岗位职责
2014/04/08 职场文书
在校实习生求职信
2014/06/18 职场文书
教师群众路线心得体会
2014/11/04 职场文书
2015年工商所工作总结
2015/05/21 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang