相同點
都屬於序列類型的資料
所謂序列類型的資料,就是說它的每一個元素都可以通過指定一個編號,行話叫做“位移量”的方式得到,而要想一次得到多個元素,可以使用切片。位移量從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 stringsReturn 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'