python中序列(列表list和元组tuple)的用法
數據結構是以某種方式(如通過編號)組合起來的數據元素的集合。再python中最基本的數據結構為序列(sequence)。序列中的元素是有序的,索引從0開始,用負索引表示序列末尾元素的位置。
python中常見的序列有兩種:列表和元組。二者主要的不同點在于:列表是可以修改的,元組是不可修改的。因此元組適用于一下兩種情況:① 出于某種考慮需要禁止修改序列的情形;② 將元組用作字典的鍵(不允許修改)。
1 通用的序列操作
? ?1.1 索引
序列中所有元素都有編號——從0開始遞增。
>>> greeting = 'Hello' >>> greeting[0] # 索引0指向第一個元素 'H' >>> greeting[-1] # 索引-1指向從后數第一個元素 'o'注:字符串本質上是由字符組成的序列。
# 將以數指定年、月、日的日期打印出來 months = ['January', 'February', 'March', 'April', 'June','July', 'August', 'September', 'October', 'November', 'December']# 一個列表,其中包含數1-31對應的結尾 endings = ['st', 'nd', 'rd'] + 17 * ['th'] + ['st', 'nd', 'rd'] + 17 * ['th'] + ['st']year = input('Year:') month = input('Month(1-12):') day = input('Day(1-31):')month_number = int(month) day_number = int(day)# 表示月和日的數字-1才得到正確的索引 month_name = months[month_number - 1] ordinal = day + endings[day_number - 1]print(month_name + ' ' + ordinal + ',' + year)/''' 運行結果: Year:2018 Month(1-12):8 Day(1-31):6 September 6th,2018 '''/? ?1.2 切片
除了使用索引來訪問單個元素外,還可以使用切片(slicing)來訪問特定范圍內的元素。切片傳入參數為兩個索引和一個步長值,均用冒號隔開。例如:[m: n: d]則獲取的是下標在[m, n-1)的元素從m開始每d個取出一個,不包含下標為n的元素。其中,若m不寫則表示從頭開始,若n不寫則表示到序列結束,若d不寫(第二個:也不寫)默認步長為1。同樣在此處,索引也可以為負值。
url = 'http://www.python.org' domain1 = url[:] domain2 = url[: -4] domain3 = url[11:] domain4 = url[11: -4] domain5 = url[11: -4: 2]print('Domain1 name:', domain1) print('Domain2 name:', domain2) print('Domain3 name:', domain3) print('Domain4 name:', domain4) print('Domain5 name:', domain5)/''' 運行結果: Domain1 name: http://www.python.org Domain2 name: http://www.python Domain3 name: python.org Domain4 name: python Domain5 name: pto '''/? 1.3 序列相加
可以使用加法運算符將兩個序列拼接起來,但不能拼接不同類型的序列。
>>> [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] >>> 'Hello,' + 'world!' 'Hello,world!'? ?1.4 乘法
將序列與某個數x相乘,則這個序列將重復x次創建出一個新的序列。
>>> 'python' * 5 'pythonpythonpythonpythonpython' >>> [42] * 10 [42, 42, 42, 42, 42, 42, 42, 42, 42, 42] sentence = "He's a very naughty boy!"screen_width = 80 text_width = len(sentence) box_width = text_width + 6 left_margin = (screen_width - box_width) // 2print(' ' * left_margin + '+' + '-' * (box_width - 2) + '+') print(' ' * left_margin + '| ' + ' ' * text_width + ' |') print(' ' * left_margin + '| ' + sentence + ' |') print(' ' * left_margin + '| ' + ' ' * text_width + ' |') print(' ' * left_margin + '+' + '-' * (box_width - 2) + '+')/''' 運行結果:+----------------------------+| || He's a very naughty boy! || |+----------------------------+ '''/? ?1.5 成員資格
要檢查特定的值是否包含在序列中,可使用運算符in,存在時返回True,否則返回False,因此這樣的運算符稱為布爾運算符。
>>> permissions = 'rw' >>> 'w' in permissions True >>> 'x' in permissions False >>> users = ['mlh', 'foo', 'bar'] >>> input('Enter your user name:') in users Enter your user name: mlh True >>> subject = '$$$ Get rich now!!! $$$' >>> '$$$' in subject True2. 列表list
? ?2.1 list函數
將任何序列轉為list
>>> list('Hello') ['H', 'e', 'l', 'l', 'o']? ?2.2 修改列表:給元素賦值
通過索引表示法給特定位置的元素賦值。
>>> x = [1, 1, 1] >>> x[1] = 2 >>> x [1, 2, 1]? ?2.3 刪除元素
>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl'] >>> del names[2] >>> names ['Alice', 'Beth', 'Dee-Dee', 'Earl']? ?2.4 給切片賦值
① 替換成長度于其不同的序列
>>> name = list('Perl') >>> name[1:] = list('ython') >>> name ['P', 'y', 't', 'h', 'o', 'n']② 插入新元素
>>> numbers = [1, 5] >>> numbers[1:1] = [2, 3, 4] >>> numbers [1, 2, 3, 4, 5]③ 刪除元素
>>> numbers = [1, 2, 3, 4, 5] >>> numbers[1: 4] = [] >>> numbers [1, 5]? ?2.5 append追加
>>> lst = [1, 2, 3] >>> lst.append(4) >>> lst [1, 2, 3, 4]? ?2.6 clear清除列表
>>> lst = [1, 2, 3] >>> lst.clear() >>> lst []? ?2.7 copy賦值列表
>>> a = [1, 2, 3] >>> b = a.copy() >>> b[1] = 4 >>> a [1, 2, 3] >>> b [1, 4, 3]? ?2.8 count統計指定元素出現次數
>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to') 2 >>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]] >>> x.count(1) 2 >>> x.count([1, 2]) 1? ?2.9 extend將多個值追加
# 使用一個列表進行擴展 >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6]# 返回一個新的序列,效率低 >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a + b [1, 2, 3, 4, 5, 6] >>> a [1, 2, 3]? ?2.10 index查找指定值第一次出現的索引
>>> knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni'] >>> knights.index('who') 4 >>> knights[4] 'who'注:若查找不在列表中的值,將會報錯
? ?2.11 insert插入新的元素
>>> numbers = [1, 2, 3, 5, 6, 7] >>> numbers.insert(2, 'four') >>> numbers [1, 2, 3, 'four', 5, 6, 7]? ?2.12 pop刪除一個元素并返回該元素
>>> x = [1, 2, 3] >>> x.pop() # 無參情況下,刪除最后一個 3 >>> x [1, 2] >>> x.pop(0) 1 >>> x [2]用該方法可以實現棧(stack),實現后進先出(LIFO)
? ?2.13 remove刪除第一個為指定值的元素
>>> x = ['to', 'be', 'or', 'not', 'to', 'be'] >>> x.remove('be') >>> x ['to', 'or', 'not', 'to', 'be']注:只能刪除列表中存在的元素,若刪除一個列表不存在的元素會報錯。
? ?2.14 reverse反序
>>> x = [1, 2, 3] >>> x.reverse() >>> x [3, 2, 1]? ?2.15 sort排序
# sort()排序,無返回值 >>> x = [4, 6, 2, 1, 7, 9] >>> x.sort() # 正序排序 >>> x [1, 2, 4, 6, 7, 9] >>> x.sort(reverse=True) # 倒序排序 >>> x [9, 7, 6, 4, 2, 1]# sorted()排序,有返回值 >>> y = sorted(x) # 正序排序 >>> y [1, 2, 4, 6, 7, 9] >>> x [9, 7, 6, 4, 2, 1]? ?2.16 高級排序
用關鍵字參數按名稱指定,key的值為排序的函數值。不會直接使用這個函數來判斷一個元素是否大于另一個元素,而是使它來為每一個元素創建一個鍵,在根據這些鍵對元素進行排序。下面的例子將根據長度對元素進行排序。
>>> x = ['aardvark', 'abalone', 'acme', 'add', 'aerate'] >>> x.sort(key=len) >>> x ['add', 'acme', 'aerate', 'abalone', 'aardvark']3 元組:不可修改的序列
其實元組和列表的性質相同,唯一的差別是不能修改。其語法是用()括起,元素之間用“,”隔開;當只有一個值時,必須在最后加一個“,”。
和列表有list()函數一樣,元素有tuple()函數,將其他序列轉換為元組。
# 創建元組 >>> 1, 2, 3 (1, 2, 3) >>> (1, 2, 3) (1, 2, 3) # 長度為一的元組 >>> 42 42 >>> 42, (42, ) >>> (42, ) (42, ) >>> 3 * (40 + 2) 126 >>> 3 * (40 + 2, ) (42, 42, 42) >>> tuple([1, 2, 3]) # 將列表轉為元組 (1, 2, 3) >>> tuple('abc') # 將字符串轉為元組 ('a', 'b', 'c') >>> x = 1, 2, 3 >>> x[1] # 根據索引取值 2 >>> x[1:2] # 切片 (1, 2)?
總結
以上是生活随笔為你收集整理的python中序列(列表list和元组tuple)的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tf.parse_single_exam
- 下一篇: Visual Studio 2013运行