跟老齐学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中Genarator函数用法分析
Apr 08 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
django项目搭建与Session使用详解
Oct 10 Python
在Python dataframe中出生日期转化为年龄的实现方法
Oct 20 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
Python while循环使用else语句代码实例
Feb 07 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
Django前后端分离csrf token获取方式
Dec 25 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
如何去掉文章里的 html 语法
2006/10/09 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
Django中url的反向查询的方法
2018/03/14 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
大型活动策划方案
2014/01/12 职场文书
秋季运动会稿件
2014/01/30 职场文书
《长江之歌》教学反思
2014/04/17 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Python MNIST手写体识别详解与试练
2021/11/07 Python