跟老齐学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实现dijkstra最短路由算法
Jan 17 Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
学习Python列表的基础知识汇总
Mar 10 Python
浅析python标准库中的glob
Mar 13 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
python设置表格边框的具体方法
Jul 17 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
Python实现生活常识解答机器人
Jun 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 cookie用户登录的详解及实例代码
2017/01/03 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
常用的javascript function代码
2008/05/23 Javascript
在网页里看flash的trace数据的js类
2009/01/10 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
英国健身超市:Fitness Superstore
2019/06/17 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
教师找工作推荐信
2013/11/23 职场文书
营销总经理岗位职责
2014/02/02 职场文书
对标管理实施方案
2014/03/12 职场文书
金融事务专业求职信
2014/04/25 职场文书
品酒会策划方案
2014/05/26 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
ICOM R71E和R72E图文对比解说
2022/04/07 无线电