跟老齐学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使用xauth方式登录饭否网然后发消息
Apr 11 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
python中numpy.zeros(np.zeros)的使用方法
Nov 07 Python
Python元组知识点总结
Feb 18 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 Python
python/golang 删除链表中的元素
Sep 14 Python
plt.figure()参数使用详解及运行演示
Jan 08 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
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
js获取提交的字符串的字节数
2009/02/09 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
python getopt 参数处理小示例
2009/06/09 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python正则表达式完全指南
2017/05/25 Python
python负载均衡的简单实现方法
2018/02/04 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
Python 多进程原理及实现
2020/12/21 Python
database面试题
2013/03/28 面试题
opencv实现图像几何变换
2021/03/24 Python
西安交大自主招生自荐信
2014/01/27 职场文书
市场营销专业求职信
2014/06/17 职场文书
初婚初育证明范本
2015/06/18 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书