列表逆序排序_Python零基础入门学习05:容器数据类型:列表和元组
注:本文所有代碼均經(jīng)過Python 3.7實(shí)際運(yùn)行檢驗(yàn),保證其嚴(yán)謹(jǐn)性。
Python的數(shù)據(jù)收納盒
數(shù)據(jù)收納盒
收納數(shù)據(jù)對(duì)象的數(shù)據(jù)類型,以一種規(guī)則的下標(biāo)索引方式訪問到每個(gè)數(shù)據(jù),是一種序列(sequence)。序列可以看作是數(shù)據(jù)收納盒,它能收納數(shù)字、字符串等基本數(shù)據(jù)類型,并將之編好有序的號(hào)碼進(jìn)行存放。這種編號(hào)就是索引(index)。
列表(list)和元組(tuple)均屬于序列。
列表可以刪除、添加、替換、重排其中的元素,是可變(mutable)序列類型。
元組不能更改,和字符串一樣,是不可變(immutable)序列類型。凡是涉及到元組、字符串等不可變序列類型的各種改變?nèi)鐒h除、添加、替換、重排等操作,都是生成一個(gè)新的元組、字符串,而原來的元組和字符串均保持不變。
關(guān)于序列的更多詳細(xì)內(nèi)容請(qǐng)見:Python隨筆:Python內(nèi)置序列函數(shù)之enumerate函數(shù)的前半部分。
上一節(jié)說過,字符串有兩套編號(hào):
- 從左向右的編號(hào),采用非負(fù)整數(shù)編號(hào)。從0開始編號(hào),向右依次加1。對(duì)s = 'abc'而言,s[0] = 'a'表示s的第1個(gè)元素,s[1] = 'b'表示s的第2個(gè)元素,依此類推。
- 從右向左的編號(hào),采用負(fù)整數(shù)編號(hào)。從-1開始,向左依次減1。對(duì)s = 'abc'而言,s[-1] = 'c'表示s的倒數(shù)第1個(gè)元素,s[-2] = 'b'表示s的 倒數(shù)第2個(gè)字符,依此類推。
列表和元組也是一樣的。如下所示:
l = ['a', 'b', 'c']l[0]Out[2]: 'a'l[-1]Out[3]: 'c't = ('a', 'b', 'c')t[0]Out[5]: 'a't[-1]Out[6]: 'c'列表和元組其余的操作如切片、查找(in、index、count)跟字符串相同,還有計(jì)算(sum、min/max)也是如此。
ls = ["cat", "dog", "tiger", 1024]ls[1: 2] = [1, 2, 3, 4] #切片print(ls)列表、元組的創(chuàng)建
#創(chuàng)建列表:l = []l = list()l = [x for x in iterable] #使用列表推導(dǎo)式創(chuàng)建列表。#創(chuàng)建元祖:t = ()t = tuple()元祖的單例(singleton)
元組還可以是單例(singleton),即只有一個(gè)元素在里面,如:
t1 = ('a', )值得注意的是,當(dāng)元組是單例時(shí),里面僅有的1個(gè)元素后面必須跟一個(gè)逗號(hào)“,”。逗號(hào)“,”表明了這是個(gè)元組里面的元素,而不是只是一個(gè)字符串或者數(shù)字或者字符等;若沒有逗號(hào),則括號(hào)會(huì)被當(dāng)作是運(yùn)算的符號(hào)。
元組甚至也可以不要括號(hào),直接用“,”。所以,對(duì)元組而言,括號(hào)可以沒有,但逗號(hào)一定要有。
t1 = ('a',) # 帶“,”的才是元組type(t1)Out[8]: tuplet2 = ('a') # 不帶“,”是字符串或整數(shù)。type(t2)Out[10]: strtype(t3)Out[12]: tuplet4 = 1, 2, 3type(t4)Out[14]: tuple列表的可變性
列表有一個(gè)非常重要的與眾不同之處,那就是列表是可變的(mutable)。
這個(gè)特性與其它數(shù)據(jù)類型都不相同,因?yàn)閕nt、float、string和tuple等數(shù)據(jù)類型一旦創(chuàng)建后都是不可變的(immutable)。你不能通過訪問string或者tuple里的某個(gè)元素來改變他們。比如tuple一旦下了定義,再想用tuple[0]= 2這種賦值方法改變tuple時(shí),系統(tǒng)將會(huì)報(bào)錯(cuò)。
而列表lists則可以通過訪問某些內(nèi)部元素進(jìn)而改變它們的值,有時(shí)候這是非常方便的。
可變性使得程序可以被更靈活地處理。盡管如此,同樣也很容易造成程序設(shè)計(jì)錯(cuò)誤。
l = [1, 2, 3, 4]l[0] = ['a']l[-1] = 'd'lOut[18]: [['a'], 2, 3, 'd']列表的操作
增長:.append()/.insert()/.extend()
縮減:.pop()/.remove()/.clear()
重新組織:.reverse()/.sort()
以s為可變類型的序列為例,其方法如下:
s.append(x)——將 x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x])。
s.insert(i, x)——在由 i 給出的索引位置將 x 插入 s (等同于 s[i:i] = [x])。
s.extend(t) 或 s += t——用 t 的內(nèi)容擴(kuò)展 s (基本上等同于 s[len(s):len(s)] = t)。
s.pop([i])——提取在 i 位置上的項(xiàng),并將其從 s 中移除。可選參數(shù) i 默認(rèn)為 -1,因此在默認(rèn)情況下會(huì)移除并返回最后一項(xiàng)。
s.remove(x)——?jiǎng)h除 s 中第一個(gè) s[i] 等于 x 的項(xiàng)目。當(dāng)在 s 中找不到 x 時(shí) remove() 操作會(huì)引發(fā) ValueError。返回值為None。
s.clear()——從 s 中移除所有項(xiàng) (等同于 del s[:])。包括 clear() 和 copy() 是為了與不支持切片操作的可變?nèi)萜?(例如 dict 和 set) 的接口保持一致。
s.reverse()——就地將列表中的元素逆序。當(dāng)反轉(zhuǎn)大尺寸序列時(shí) reverse() 方法會(huì)原地修改該序列以保證空間經(jīng)濟(jì)性。 為提醒用戶此操作是通過間接影響進(jìn)行的,它并不會(huì)返回反轉(zhuǎn)后的序列。
s.sort(*, key=None, reverse=False)——此方法會(huì)對(duì)列表進(jìn)行原地排序,只使用 < 來進(jìn)行各項(xiàng)間比較。 異常不會(huì)被屏蔽 , 如果有任何比較操作失敗,整個(gè)排序操作將失敗(而列表可能會(huì)處于被部分修改的狀態(tài))。
合并:加法運(yùn)算+,連接2個(gè)列表,生成1個(gè)新的列表。
下面是列表操作的一些例子:
l = [1, 2, 3, 4]l[0] # 訪問l中的index=0(即列表中的第1個(gè))的元素。Out[20]: 1l.append(5) # 在l的尾部添加一個(gè)新的元素。lOut[22]: [1, 2, 3, 4, 5]l.reverse() # 使l中的元素逆序排列,并改變了l自身。lOut[24]: [5, 4, 3, 2, 1]l.clear() # 清空l中的所有元素,使得l成為一個(gè)空列表。lOut[26]: [][1, 2, 3] + [4, 5]Out[27]: [1, 2, 3, 4, 5]To be continued.
總結(jié)
以上是生活随笔為你收集整理的列表逆序排序_Python零基础入门学习05:容器数据类型:列表和元组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪些食物是你吃一次就记一辈子?
- 下一篇: python qq模块_Python的n