跟老齐学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中的五种异常处理机制介绍
Sep 02 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
python友情链接检查方法
Jul 08 Python
老生常谈python函数参数的区别(必看篇)
May 29 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
python 读取、写入txt文件的示例
Sep 27 Python
微信小程序调用python模型
Apr 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
改造一台复古桌面收音机
2021/03/02 无线电
php实现三级级联下拉框
2016/04/17 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
vue移动端的左右滑动事件详解
2020/06/17 Javascript
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python进行两个表格对比的方法
2018/06/27 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
numpy基础教程之np.linalg
2019/02/12 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
python入门之基础语法学习笔记
2020/02/08 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
幼儿园开学家长寄语
2014/01/19 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
党员公开承诺书内容
2014/05/20 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
机关作风建设心得体会
2014/10/22 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记