pyhton list和str比较
相同点
都属于序列类型的数据
所谓序列类型的数据,就是说它的每一个元素都可以通过指定一个编号,行话叫做“偏移量”的方式得到,而要想一次得到多个元素,可以使用切片。偏移量从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 = ["hiekay","github","io"] >>> git_list[0] 'hiekay' >>> git_list[len(git_list)-1] 'io' >>> git_list[0:2] ['hiekay', 'github'] >>> b = ['hiekay'] >>> b*7 ['hiekay', 'hiekay', 'hiekay', 'hiekay', 'hiekay', 'hiekay', 'hiekay']
对于此类数据,下面一些操作是类似的:
>>> 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 ['hiekay', 'github', 'io'] >>> language + git_list #用+号连接list,得到一个新的list ['python', 'hiekay', 'github', 'io'] >>> git_list ['hiekay', 'github', 'io'] >>> language ['python'] >>> len(welcome_str) #得到字符数 11 >>> len(git_list) #得到元素数 3
区别
list和str的最大区别是:list是可以改变的,str不可变。这个怎么理解呢?
首先看对list的这些操作,其特点是在原处将list进行了修改:
>>> git_list ['hiekay', 'github', 'io'] >>> git_list.append("python") >>> git_list ['hiekay', 'github', 'io', 'python'] >>> git_list[1] 'github' >>> git_list[1] = 'github.com' >>> git_list ['hiekay', 'github.com', 'io', 'python'] >>> git_list.insert(1,"algorithm") >>> git_list ['hiekay', 'algorithm', 'github.com', 'io', 'python'] >>> git_list.pop() 'python' >>> del git_list[1] >>> git_list ['hiekay', '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) >>> line = "Hello.I am hiekay.Welcome you." >>> line.split(".") #以英文的句点为分隔符,得到list ['Hello', 'I am hiekay', 'Welcome you', ''] >>> line.split(".",1) #这个1,就是表达了上文中的:If maxsplit is given, at most maxsplit splits are done. ['Hello', 'I am hiekay.Welcome you.'] >>> name = "Albert Ainstain" #也有可能用空格来做为分隔符 >>> name.split(" ") ['Albert', 'Ainstain'] >>> s = "I am, writing\npython\tbook on line" #这个字符串中有空格,逗号,换行\n,tab缩进\t 符号 >>> print s #输出之后的样式 I am, writing python book on line >>> s.split() #用split(),但是括号中不输入任何参数 ['I', 'am,', 'writing', 'python', 'book', 'on', 'line']
如果split()不输入任何参数,显示就是见到任何分割符号,就用其分割了。
"[sep]".join(list)
join可以说是split的逆运算,举例:
>>> name ['Albert', 'Ainstain'] >>> "".join(name) #将list中的元素连接起来,但是没有连接符,表示一个一个紧邻着 'AlbertAinstain' >>> ".".join(name) #以英文的句点做为连接分隔符 'Albert.Ainstain' >>> " ".join(name) #以空格做为连接的分隔符 'Albert Ainstain'
回到上面那个神奇的例子中,可以这么使用join.
>>> s = "I am, writing\npython\tbook on line" >>> print s I am, writing python book on line >>> s.split() ['I', 'am,', 'writing', 'python', 'book', 'on', 'line'] >>> " ".join(s.split()) #重新连接,不过有一点遗憾,am后面逗号还是有的。怎么去掉? 'I am, writing python book on line'
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
程序员如何写一份更好的简历?
之前我写了一篇如何准备技术面试的文章,得到了不少读者的支持,也给了我更多动力把求职系列教程写下去。 面试前要准备的第一件事就是写简历,从零开始写简历是一件痛苦的事,因为它既重要又耗时。现在就有很多求职者在电脑前急躁不安地搜索简历模版和参考例句,却不知道如何下笔。写得太短的话HR一定觉得没诚意,写得太长的话又无从下手。有的求职者写完连自己都不忍心看,错别字连篇,排版混乱就投出去,所以海投简历也没有回应。而且程序员工资相对较高,有大量人才从其他专业转来,竞争非常激烈,所以如何从众多简历中脱颖而出,赢得面试的机会就非常重要了。这篇文章会从两个方面介绍简历的常见问题 1. 简历中的常见错误 2. 简历应该怎么写 看完之后,读者就能从中学习到如何写一份能吸引住HR眼光的更好的简历。 简历中的常见错误 1. 信息过多,缺乏重点 常见表现是一开始十几行的技能列表 熟悉使用Python,Go,熟悉C++++,HTML,C++SS, Vue, jQuery。 熟悉基本数据结构,算法设计能力。 熟悉TC++P/IP,UDP,HTTP,DNS,WebSocket等网络协议。 … 我举一个血淋淋的真实例子: ...
- 下一篇
别了,JavaScript;你好,WebAssembly
作为JavaScript替代,一种Web开发的新形式已经浮出水面:WebAssembly。 Web开发与JavaScript开发向来是同义词。就是说,直到现在。但一种新的Web开发形式已然出现,声言会取代JavaScript。作为一个拥有15年Web开发经验的程序员,这个新方向瞬间吸引了我。 WebAssembly (Wasm)是一种在浏览器中可以执行的二进制指令,旨在为C#等高级语言提供一种编译目标。去年,微软开始尝试基于WebAssembly使用Mono运行时让.NET进入浏览器。Mono为.NET运行库(.dll)提供了基于WebAssembly运行的环境。运行在Mono之上的是Blazor,一个构建于.NET的单页Web应用开发框架,通过Mono的WebAssembly运行时在浏览器中运行。WebAssembly-Mono-Blazor这个全栈.NET应用平台能够催生不用JavaScript或浏览器插件的开发者。 这个新东东的出现立即引发了问题,很正常。 做出选择 我的答案完全代表自己的想法,而且我觉得并非所有开发者、项目或工具都应该一样。对我而言,答案很清楚,简单说就是“选择...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- 设置Eclipse缩进为4个空格,增强代码规范