跟老齐学Python之list和str比较
2018-10-15 17:14
相同点
都属于序列类型的数据
所谓序列类型的数据,就是说它的每一个元素都可以通过指定一个编号,行话叫做“偏移量”的方式得到,而要想一次得到多个元素,可以使用切片。偏移量从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进行了修改:
以上这些操作,如果用在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 doesnt 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)
得到了对这个内置函数的完整说明。特别强调:这是一种非常好的学习方法
不管是否看懂上面这段话,都可以看例子。还是希望看官能够理解上面的内容。
>>> 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