跟老齐学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对象的深拷贝和浅拷贝详解
Aug 25 Python
python实现的jpg格式图片修复代码
Apr 21 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
Python中print和return的作用及区别解析
May 05 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
Python实现括号匹配方法详解
Feb 10 Python
python读写文件write和flush的实现方式
Feb 21 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
Python实现简单的猜单词
Jun 15 Python
python析构函数用法及注意事项
Jun 22 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
刚才在简化php的库,结果发现很多东西
2006/12/31 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
使用pdb模块调试Python程序实例
2015/06/02 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
python 将md5转为16字节的方法
2018/05/29 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
个性婚礼策划方案
2014/05/17 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
软环境建设心得体会
2014/09/09 职场文书
维稳工作情况汇报
2014/10/27 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript