跟老齐学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 生成目录树及显示文件大小的代码
Jul 23 Python
python万年历实现代码 含运行结果
May 20 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
使用python对excle和json互相转换的示例
Oct 23 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
Feb 17 Python
python else语句在循环中的运用详解
Jul 06 Python
Python可视化神器pyecharts绘制水球图
Jul 07 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
基于PHP读取csv文件内容的详解
2013/06/18 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
js实现自定义路由
2017/02/04 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
vue实现购物车小案例
2019/09/27 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
Python计算三维矢量幅度的方法
2015/06/15 Python
Python网络爬虫实例讲解
2016/04/28 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
大学生校园创业计划书
2014/02/08 职场文书
上课打牌的检讨书
2014/02/15 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
2014年文员工作总结
2014/11/18 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
2015年班干部工作总结
2015/04/29 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS