跟老齐学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求算数平方根和约数的方法汇总
Mar 09 Python
Python与R语言的简要对比
Nov 14 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
Python if语句知识点用法总结
Jun 10 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
Python常用数据分析模块原理解析
Jul 20 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
如何用Python搭建gRPC服务
Jun 30 Python
Python学习之时间包使用教程详解
Mar 21 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_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
php 表单数据的获取代码
2009/03/10 PHP
一个PHP数组应该有多大的分析
2009/07/30 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php操作mongoDB实例分析
2014/12/29 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
二行代码解决全部网页木马
2008/03/28 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
BootStrap selectpicker
2016/06/20 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
python单元测试unittest实例详解
2015/05/11 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python中文竖排显示的方法
2015/07/28 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
如何通过python检查文件是否被占用
2020/12/18 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
服装设计专业自荐书范文
2013/12/30 职场文书
出国签证在职证明
2014/01/16 职场文书
考研经验交流会策划书
2015/11/02 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
详解Python如何批量采集京东商品数据流程
2022/01/22 Python