列表和字符串这两种对象类型有很多类似的地方,也有很大的区别,有必要对他们做个比较。哈哈,我在说废话!
相同点
两者都属于序列类型。因此,对属于序列的操作都适合两者。
在上一篇文章中,我提到对于序列的访问都可以通过一个编号的方式得到,或者说是索引值吧!而想一次得打多个元素,可以使用切片。索引值从0开始,到总元素数减一结束。对于其基本操作,我在这里再操作一下。
>>> string = "This is a string"
>>> print string
This is a string
>>> string[0]
'T'
>>> string[2]
'i'
>>> string[:1]
'T'
>>> string[:]
'This is a string'
>>> string[1:]
'his is a string'
>>> string[:-1]
'This is a strin'
>>> string [3:6]
's i'
>>> string [-3:-6]
''
>>> string [-6:-3]
'str'
>>>
以上是对关于字符串的基本操作,其他关于字符串的操作,在此再不一一赘述。
关于列表的操作。
>>> arraylist = ["java",1,"C++","Objective-C",3,"Python",5]
>>> arrlist = ["I","Love","Python"]
>>> print arraylist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5]
>>> print arrlist
['I', 'Love', 'Python']
>>> arraylist[1]
1
>>> arraylist[:2]
['java', 1]
>>> arraylist[:]
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5]
>>> arraylist[:-1]
['java', 1, 'C++', 'Objective-C', 3, 'Python']
>>> arraylist[::-1]
[5, 'Python', 3, 'Objective-C', 'C++', 1, 'java']
>>> arraylist[-6:-3]
[1, 'C++', 'Objective-C']
>>> arraylist[3:6]
['Objective-C', 3, 'Python']
>>> print arraylist+arrlist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5, 'I', 'Love', 'Python']
>>>
关于序列的其他基本操作,我不在一一赘述了。
区别
列表和字符串最大的区别就是:列表可以改变,字符串不可以改变。
首先我们来看看对于列表的操作。其特点是:在原处对列表进行修改。
>>> print arraylist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5]
>>> arraylist.append("VC++")
>>> print arraylist
['java', 1, 'C++', 'Objective-C', 3, 'Python', 5, 'VC++']
>>> arraylist[1]
1
>>> arraylist[1]='yi'
>>> print arraylist
['java', 'yi', 'C++', 'Objective-C', 3, 'Python', 5, 'VC++']
>>> arraylist.insert(1,"Lenovo")
>>> print arraylist
['java', 'Lenovo', 'yi', 'C++', 'Objective-C', 3, 'Python', 5, 'VC++']
>>> arraylist.pop()
'VC++'
>>> del arraylist[1]
>>> print arraylist
['java', 'yi', 'C++', 'Objective-C', 3, 'Python', 5]
>>>
思考,如果以上的操作用在字符串的操作上,那么会发生什么鬼呢??
示例演练在字符串中操作
>>> print string
This is a string
>>> string[1]
'h'
>>> string[1]='T'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment #str对象类型不支持指定的任务
>>> string.append("char")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append' #str对象类型没有追加属性。
>>> del string[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object doesn't support item deletion
>>> string.insert(1,"T")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'insert'
>>>
思考:那么怎么修改一个str对象呢??
答案是:重新生成一个新的str对象。如何生成?请看下面。
>>> string = "python"
>>> print string
python
>>> string.replace('p','P')
'Python'
>>> print string #原字符串对象不变。
python
>>>
我们可以看到,这儿使用了replace( )函数。关于此函数,我们以后继续会涉及到的。
那么有没有其他的方法呢?
答案是有,下面就是将字符串转换为列表。别着急,后面会学习列表和字符串的相会转换。
>>> string
'python'
>>> newString = list(string)
>>> newString[0] = 'P'
>>> ''.join(newString)
'Python'
>>>
我们可以看出将字符串转换成列表后修改值,然后用join组成新字符串。
也可以用切片的方法进行修改。
>>> print string
python
>>> string[:0]+'P'+string[1:]
'Python'
>>>
不过这个得自己思考哦!自己思考的,才是最后能记住的。
接下来我们学习一下多维列表,类似于java和类C语言的多维数组
>>> multlist = [[1,2,3],[4,5,6],["Python","Java","C++"]]
>>> print multlist
[[1, 2, 3], [4, 5, 6], ['Python', 'Java', 'C++']]
>>> multlist[1][1]
5
>>> multlist[2][1]
'Java'
>>>
很简单吧。哈哈。
来,到了神奇的一节了。
列表和字符串的相互转换
在学习列表和字符串之间的转换的时候,我们需要涉及到两个基本的函数。split( )函数和join( )函数
str.split( )函数
Help on method_descriptor:
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.
(END)
意思大概是使用seq做为分隔符,从字符串S中返回一个单词列表。如果给定了maxsplit,最多有maxsplit被分割完成,如果没有指定seq或者是空的,结果中有任何空白的字符串将是一个分隔符并且任何的空字符串将会被移除。
突然感觉英语没有学习好,翻译起来比较晦涩难懂,不过可以了,感觉比谷歌机器人翻译的好多了,谷歌翻译翻译出来的,我根本看不懂,或许我翻译的你也看不懂,但是没有关系,我们有示例,通过示例可以看出来。
>>> string = "Hello.I .am . a. dog"
>>> string.split(".")
['Hello', 'I ', 'am ', ' a', ' dog']
>>> string.split(".",3)
['Hello', 'I ', 'am ', ' a. dog']
>>> string.split(".",2)
['Hello', 'I ', 'am . a. dog']
>>>
上面示例中2,3就是官方文档中给定的Maxsplit。最大分割几个的意思。如果超过,到最后一个分隔符自动终止。
还可以用空格作为分隔符。像下面这样。
>>> string = " Hello I am a dog"
>>> print string
Hello I am a dog
>>> string.split(" ")
['', 'Hello', 'I', 'am', 'a', 'dog']
>>>
再看一个神奇的分割,会觉得这个split()函数很强大。
>>> string = "Hello,I\n am\t a\n dog"
>>> print string
Hello,I
am a
dog
>>> string.split()
['Hello,I', 'am', 'a', 'dog']
>>>
看到了吗,字符串中包含\n \t ,好几个分隔符。但是只要split( )无参,那么每个遇到的符号都会被当做分隔符的。
join()函数
join()函数,说过来其实是split( )函数的逆运算。之前我们提到过逆运算的是谁??是不是忘了,我就知道你忘了,是reversed( )和[ ::-1 ]。
>>> string = " Hello I am hungry"
>>> " ".join(string)
' H e l l o I a m h u n g r y'
>>> ".".join(string)
' .H.e.l.l.o. .I. .a.m. .h.u.n.g.r.y'
>>> "".join(string)
' Hello I am hungry'
>>>
再来看看那个神奇的例子。
>>> string = " Hello, I\n am\t hun\ngry"
>>> print string
Hello, I
am hun
gry
>>> string.split()
['Hello,', 'I', 'am', 'hun', 'gry']
>>> " ".join(string)
' H e l l o , I \n a m \t h u n \n g r y'
>>> "".join(string)
' Hello, I\n am\t hun\ngry'
>>> "".join(string.split())
'Hello,Iamhungry'
>>> " ".join(string.split())
'Hello, I am hun gry'
>>>
好了,以上就是今天要学习的Python关于列表和字符串的比较方面的知识。明天更新元组