跟老齐学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实现远程调用MetaSploit的方法
Aug 22 Python
详解Python中的type()方法的使用
May 21 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
python进行两个表格对比的方法
Jun 27 Python
python: 自动安装缺失库文件的方法
Oct 22 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
Python 使用多属性来进行排序
Sep 01 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 Python
Python实现点云投影到平面显示
Jan 18 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 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 身份验证方面的函数
2009/10/11 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
小程序云开发实战小结
2018/10/25 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
Python内建数据结构详解
2016/02/03 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python 序列的方法总结
2016/10/18 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
python文字转语音实现过程解析
2019/11/12 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
银行服务理念口号
2015/12/25 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技