跟老齐学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与js)两种实现
Feb 21 Python
Python创建文件和追加文件内容实例
Oct 21 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
Python 将pdf转成图片的方法
Apr 23 Python
python 字典修改键(key)的几种方法
Aug 10 Python
详解用python写一个抽奖程序
May 10 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
python中print格式化输出的问题
Apr 16 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 Python
Python+Tkinter打造签名设计工具
Apr 01 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 flush()与ob_flush()的区别详解
2013/06/03 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
python线程池threadpool使用篇
2018/04/27 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
在Django中实现添加user到group并查看
2019/11/18 Python
python isinstance函数用法详解
2020/02/13 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
请说出以下代码输出什么
2013/08/30 面试题
面试求职的个人自我评价
2013/11/16 职场文书
冬季施工防火方案
2014/05/17 职场文书
护理专科学生自荐书
2014/07/05 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
2015年暑期见闻
2015/07/14 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书