跟老齐学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 相关文章推荐
压缩包密码破解示例分享(类似典破解)
Jan 17 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
分享8点超级有用的Python编程建议(推荐)
Oct 13 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
pycharm导入源码的具体步骤
Aug 04 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 Python
用基于python的appium爬取b站直播消费记录
Apr 17 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/10/09 PHP
几个php应用技巧
2008/03/27 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
PHP多文件上传实例
2015/07/09 PHP
php创建无限级树型菜单
2015/11/05 PHP
Jquery 弹出层插件实现代码
2009/10/24 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
python和bash统计CPU利用率的方法
2015/07/10 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
python 装饰器的使用示例
2020/10/10 Python
用Python 执行cmd命令
2020/12/18 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
vue+django实现下载文件的示例
2021/03/24 Vue.js
高中课前三分钟演讲稿
2014/08/18 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
Python办公自动化解决world文件批量转换
2021/09/15 Python