跟老齐学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中DOM方法的动态性
Apr 11 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
pandas的qcut()方法详解
Jul 06 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
使用python制作一个解压缩软件
Nov 13 Python
python dataframe NaN处理方式
Dec 26 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
如何使用python写截屏小工具
Sep 29 Python
python中time.ctime()实例用法
Feb 03 Python
python实现三阶魔方还原的示例代码
Apr 28 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删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
Python中的闭包详细介绍和实例
2014/11/21 Python
列举Python中吸引人的一些特性
2015/04/09 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
Python 去除字符串中指定字符串
2020/03/05 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
给女朋友的道歉信
2014/01/10 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
学习作风建设心得体会
2014/10/22 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书