跟老齐学Python之list和str比较


Posted in Python onSeptember 20, 2014

相同点

都属于序列类型的数据

所谓序列类型的数据,就是说它的每一个元素都可以通过指定一个编号,行话叫做“偏移量”的方式得到,而要想一次得到多个元素,可以使用切片。偏移量从0开始,总元素数减1结束。

例如:

>>> welcome_str = "Welcome you"
>>> welcome_str[0]
'W'
>>> welcome_str[1]
'e'
>>> welcome_str[len(welcome_str)-1]
'u'
>>> welcome_str[:4]
'Welc'
>>> a = "python"
>>> a*3
'pythonpythonpython'

>>> git_list = ["qiwsir","github","io"]
>>> git_list[0]
'qiwsir'
>>> git_list[len(git_list)-1]
'io'
>>> git_list[0:2]
['qiwsir', 'github']
>>> b = ['qiwsir']
>>> b*7
['qiwsir', 'qiwsir', 'qiwsir', 'qiwsir', 'qiwsir', 'qiwsir', 'qiwsir']

对于此类数据,下面一些操作是类似的:

>>> first = "hello,world"
>>> welcome_str
'Welcome you'
>>> first+","+welcome_str  #用+号连接str
'hello,world,Welcome you'
>>> welcome_str       #原来的str没有受到影响,即上面的+号连接后从新生成了一个字符串
'Welcome you'
>>> first
'hello,world'

>>> language = ['python']
>>> git_list
['qiwsir', 'github', 'io']
>>> language + git_list   #用+号连接list,得到一个新的list
['python', 'qiwsir', 'github', 'io']
>>> git_list
['qiwsir', 'github', 'io']
>>> language
['python']

>>> len(welcome_str)  #得到字符数
11
>>> len(git_list)    #得到元素数
3

区别

list和str的最大区别是:list是原处可以改变的,str则原处不可变。这个怎么理解呢?

首先看对list的这些操作,其特点是在原处将list进行了修改:

>>> git_list
['qiwsir', 'github', 'io']

>>> git_list.append("python")
>>> git_list
['qiwsir', 'github', 'io', 'python']

>>> git_list[1]        
'github'
>>> git_list[1] = 'github.com'
>>> git_list
['qiwsir', 'github.com', 'io', 'python']

>>> git_list.insert(1,"algorithm")
>>> git_list
['qiwsir', 'algorithm', 'github.com', 'io', 'python']

>>> git_list.pop()
'python'

>>> del git_list[1]
>>> git_list
['qiwsir', 'github.com', 'io']

以上这些操作,如果用在str上,都会报错,比如:

>>> welcome_str
'Welcome you'

>>> welcome_str[1] = 'E'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

>>> del welcome_str[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object doesn't support item deletion

>>> welcome_str.append("E")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'

如果要修改一个str,不得不这样。

>>> welcome_str
'Welcome you'
>>> welcome_str[0] + "E" + welcome_str[2:] #从新生成一个str
'WElcome you'
>>> welcome_str             #对原来的没有任何影响
'Welcome you'

其实,在这种做法中,相当于从新生成了一个str。

多维list

这个也应该算是两者的区别了,虽然有点牵强。在str中,里面的每个元素只能是字符,在list中,元素可以是任何类型的数据。前面见的多是数字或者字符,其实还可以这样:

>>> matrix = [[1,2,3],[4,5,6],[7,8,9]]
>>> matrix = [[1,2,3],[4,5,6],[7,8,9]]
>>> matrix[0][1]
2
>>> mult = [[1,2,3],['a','b','c'],'d','e']
>>> mult
[[1, 2, 3], ['a', 'b', 'c'], 'd', 'e']
>>> mult[1][1]
'b'
>>> mult[2]
'd'

以上显示了多维list以及访问方式。在多维的情况下,里面的list也跟一个前面元素一样对待。

list和str转化

str.split()

这个内置函数实现的是将str转化为list。其中str=""是分隔符。

在看例子之前,请看官在交互模式下做如下操作:

>>>help(str.split)
得到了对这个内置函数的完整说明。特别强调:这是一种非常好的学习方法

split(...)
S.split([sep [,maxsplit]]) -> list of strings
Return a list of the words in the string S, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done. If sep is not specified or is None, any whitespace string is a separator and empty strings are removed from the result.

不管是否看懂上面这段话,都可以看例子。还是希望看官能够理解上面的内容。

>>> line = "Hello.I am qiwsir.Welcome you." 

>>> line.split(".")   #以英文的句点为分隔符,得到list
['Hello', 'I am qiwsir', 'Welcome you', '']

>>> line.split(".",1)  #这个1,就是表达了上文中的:If maxsplit is given, at most maxsplit splits are done.
['Hello', 'I am qiwsir.Welcome you.']    

>>> name = "Albert Ainstain"  #也有可能用空格来做为分隔符
>>> name.split(" ")
['Albert', 'Ainstain']
"[sep]".join(list)

join可以说是split的逆运算,举例:

>>> name
['Albert', 'Ainstain']
>>> "".join(name)    #将list中的元素连接起来,但是没有连接符,表示一个一个紧邻着
'AlbertAinstain'
>>> ".".join(name)   #以英文的句点做为连接分隔符
'Albert.Ainstain'
>>> " ".join(name)   #以空格做为连接的分隔符
'Albert Ainstain'
Python 相关文章推荐
Python下使用Psyco模块优化运行速度
Apr 05 Python
Python计算三维矢量幅度的方法
Jun 15 Python
Python实现的使用telnet登陆聊天室实例
Jun 17 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
使用Puppeteer爬取微信文章的实现
Feb 11 Python
Python几种常见算法汇总
Jun 02 Python
python 两种方法删除空文件夹
Sep 29 Python
python palywright库基本使用
Jan 21 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
用python自动生成日历
Apr 24 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
Python显示进度条的方法
Sep 20 #Python
python中对list去重的多种方法
Sep 18 #Python
Python中用Descriptor实现类级属性(Property)详解
Sep 18 #Python
Python中的闭包总结
Sep 18 #Python
python的即时标记项目练习笔记
Sep 18 #Python
python脚本实现分析dns日志并对受访域名排行
Sep 18 #Python
python中的字典详细介绍
Sep 18 #Python
You might like
第十三节 对象串行化 [13]
2006/10/09 PHP
PHP网站提速三大“软”招
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
web 页面分页打印的实现
2009/06/22 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
详解微信小程序input标签正则初体验
2018/08/18 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
python 循环遍历字典元素的简单方法
2016/09/11 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
岗位职责定义及内容
2013/11/08 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
保证书范文大全
2014/04/28 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2014年生产部工作总结
2014/12/17 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
小学班主任研修日志
2015/11/13 职场文书
html5调用摄像头截图功能
2022/01/18 Javascript
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL