什么是串列?
串列是由一系列按照特定順序排列的元素組成,直觀理解就是:陣列, 只不過python的串列有點特別,他不限制存盤的元素型別,使用手感上來說反倒更像是對標Java中的ArrayList,
flowers = ['Rose','Lily','Jasmine','Rosemary'] print(flowers)
列印結果:
['Rose', 'Lily', 'Jasmine', 'Rosemary']
創建空串列:
flowers = []
訪問元素
訪問串列中的元素,都是用索引來訪問,從0開始遞增,
flowers = ['Rose','Lily','Jasmine','Rosemary'] print(flowers[0])
列印結果:
Rose
如果我要取最后一個元素呢?
其他編程語言的做法都是先取串列的總長度,然后總長度-1得到最后一個元素的索引,
在python里可以用-1來表示最后一個元素的索引:
flowers = ['Rose','Lily','Jasmine','Rosemary'] print(flowers[-1])
列印結果:
Rosemary
取倒數第二個元素:
flowers = ['Rose','Lily','Jasmine','Rosemary'] print(flowers[-2])
列印結果:
Jasmine
請注意:如果串列為空,那么訪問最后一個元素會出錯,同樣的如果串列只有一個元素,訪問倒數第二個元素也會出錯,
字串與串列
字串是不是串列?
字串就是由字符組成的序列,在某個視角上來看,字串屬于是一種特殊的串列,但是它不等于串列,只是python這門語言提供了一些獨有的特性,使得我們可以用串列的操作方式來操作字串,
word = 'abcdefg' print(word[0])
列印結果:
a
字串與串列的轉換
字串雖然可以看成串列,但是它與串列的資料型別,應用場景,表現方式都完全不同,所以有些時候我們需要型別轉換,
字串轉串列:
word = 'abcdefg' print(word) print(list(word))
列印結果:
abcdefg
['a', 'b', 'c', 'd', 'e', 'f', 'g']
串列轉字串:
flowers = ['Rose','Lily','Jasmine','Rosemary'] print(flowers) print(''.join(flowers))
列印結果:
['Rose', 'Lily', 'Jasmine', 'Rosemary']
RoseLilyJasmineRosemary
基礎操作
在串列末尾添加元素 insert()
word = [] word.append('a') word.append('b') word.append(2) word.append('c') print(word)
列印結果:
['a', 'b', 2, 'c']
請注意:很多操作方法是直接改變串列本身,方法本身不會有回傳值,需要仔細留意,
在串列中插入元素 insert()
word = ['a','b','c','d'] word.insert(1,'xxx') print(word)
列印結果:
['a', 'xxx', 'b', 'c', 'd']
洗掉串列元素 del
word = ['a','b','c','d'] del word[1] print(word)
列印結果:
['a', 'c', 'd']
彈出串列元素 pop()
pop是堆疊的標準操作,在這里python提供了這一方法,可以彈出串列中的元素,彈出來的元素可以用變數接收,進一步供業務邏輯使用,而原串列的改變與del洗掉元素相同,默認每次彈出串列末尾的元素,
word = ['a','b','c','d'] s = word.pop() print(word) print(s)
列印結果:
['a', 'b', 'c']
d
你也可以彈出任意位置的元素
word = ['a','b','c','d'] s = word.pop(0) print(word) print(s)
列印結果:
['b', 'c', 'd']
a
python沒有提供push方法,但是我們不管是需要先進先出還是先進后出的資料結構,都可以用 insert + append + pop 三個方法進行組合完成,
根據值洗掉元素 remove()
如果你知道要洗掉的值,但是不知道他的下標,那么可以使用remove方法進行洗掉
word = ['a','b','b','c','d'] word.remove('b') print(word)
列印結果:
['a', 'b', 'c', 'd']
如你所見,remove只能洗掉第一個值,如果你要洗掉的值可能在串列中出現多次,那么只能遍歷處理,
獲取串列長度 len()
word = ['a','b','c'] print(len(word))
列印結果:
3
元素在串列中出現的次數 count()
word = ['a','b','b','c','d'] i = word.count('b') print(i)
列印結果:
2
合并串列 extend()
word = ['a','b','b','c','d'] num = [2,3,4] word.extend(num) print(word)
列印結果:
['a', 'b', 'b', 'c', 'd', 2, 3, 4]
實際上你也可以直接用加號 將兩個串列相加
word = ['a','b','b','c','d'] num = [2,3,4] all = word + num print(all)
列印結果:
['a', 'b', 'b', 'c', 'd', 2, 3, 4]
不同之處是 一個是在原串列上做擴充,一個是新建一個串列進行裝載,
組織串列
永久性排序 sort()
正序:
word = ['e','b','a','c','d'] word.sort() print(word)
列印結果:
['a', 'b', 'c', 'd', 'e']
倒序:
word = ['e','b','a','c','d'] word.sort(reverse=True) print(word)
列印結果:
['e', 'd', 'c', 'b', 'a']
臨時性排序 sorted()
臨時性排序不會改變原來的串列,而是sorted方法會回傳一個排序后的結果串列,
word = ['e','b','a','c','d'] print(sorted(word))
列印結果:
['a', 'b', 'c', 'd', 'e']
同樣的 倒序也是加上reverse引數:
word = ['e','b','a','c','d'] print(sorted(word,reverse=True))
列印結果:
['e', 'd', 'c', 'b', 'a']
實際上sorted可以傳入任何序列,但它總是回傳一個串列.
如下演示將一個字串進行排序
word = 'ebdcgaf' lis = sorted(word) print(lis) print(''.join(lis))
列印結果:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
abcdefg
反轉串列 reverse()
反轉串列與排序無關,僅僅是將串列元素反向排列,
word = ['e','b','a','c','d'] word.reverse()
列印結果:
['d', 'c', 'a', 'b', 'e']
那如果想要恢復串列怎么辦呢? 那就把反轉之后的串列再反轉,也就恢復了,
遍歷串列
python中遍歷的寫法是for xx in list,末尾跟個冒號,第二行開始縮進,進入回圈之中,
word = ['a','b','c'] for name in word: print('這個單詞是:' + name)
列印結果:
這個單詞是:a
這個單詞是:b
這個單詞是:c
for回圈中的代碼一律縮進,如果某一行沒縮進,就代表出了回圈了,
word = ['a','b','c'] for name in word: print('這個單詞是:' + name) print('已經回圈完了哦')
列印結果:
這個單詞是:a
這個單詞是:b
這個單詞是:c
已經回圈完了哦
數字串列
快速生成 range()
你可以直接列印出一堆臨時生成的數字,range方法的引數為起止數字,但是不包含結束數字,
for num in range(1,5): print(num)
列印結果:
1
2
3
4
range方法的結果并不是一個直接可用的數字串列,如果要轉成串列,可以使用list方法將它轉化一下,
nums = list(range(1,5)) print(nums)
列印結果:
[1, 2, 3, 4]
range還有第三個引數,可以指定步長
nums = list(range(1,11,2)) print(nums)
列印結果:
[1, 3, 5, 7, 9]
串列統計 min、max、sum
統計串列中的最小值、最大值、值總和
nums = [1,2,3,4,5] print(min(nums)) print(max(nums)) print(sum(nums))
列印結果:
1
5
15
串列決議
以下代碼為1-10這10個數字,按2步長取值,也就是1,3,5,7,9這五個數,每個數的平方組成一個串列
nums = [] for value in range(1,11,2): nums.append(value**2) print(nums)
列印結果:
[1, 9, 25, 49, 81]
下面用串列決議的特性來進行改寫
nums = [value**2 for value in range(1,11,2)] print(nums)
雖然說串列決議的寫法對初學者來說不易閱讀,但是由于代碼量少,在老手眼里反倒覺得這種寫法簡單直接,所以閱讀到別人寫的代碼的時候,有時候會看到這種寫法,
切片
切左切右切中間
除了使用索引來訪問單個元素之外,還可以使用切片來訪問指定范圍內的元素
訪問第2,3,4三個元素:
word = ['a','b','c','d','e','f'] print(word[1:4])
列印結果:
['b', 'c', 'd']
冒號前為開始切的索引,冒號后為結束的索引,但是不包含這個結束位置的元素,
如果你沒有指定開始索引,那么切片將從0開始
列印前3個元素:
word = ['a','b','c','d','e','f'] print(word[:3])
列印結果:
['a', 'b', 'c']
同樣的如果沒有指定結束索引,那么切片將切到串列最后
列印第4個元素到最后:
word = ['a','b','c','d','e','f'] print(word[3:])
列印結果:
['d', 'e', 'f']
也可以使用負數
列印最后三個元素
word = ['a','b','c','d','e','f'] print(word[-3:])
列印結果:
['d', 'e', 'f']
猜一猜:如果-3改成-13,結果會如何呢?
切整個串列
切整個串列實際上得到的內容就是串列本身,一般是復制串列的時候會這么做,
word = ['a','b','c','d','e','f'] word2 = word[:] print(word2)
列印結果:
['a', 'b', 'c', 'd', 'e', 'f']
帶著步長切
切片默認的步長為1,所以切片范圍是包含了所有元素,然而我們可以顯式的指定步長,
從3到15,每3個元素切一個:
nums = list(range(0,20)) print(nums[3:16:3])
列印結果:
[3, 6, 9, 12, 15]
切全部,每2個切一個元素:
word = ['a','b','c','d','e','f'] print(word[::2])
列印結果:
['a', 'c', 'e']
切全部,每2個切一個元素,倒著切:
word = ['a','b','c','d','e','f'] print(word[::-2])
列印結果:
['f', 'd', 'b']
步長可以為負數,但是不能為0,步長為0就沒法移動了,
串列運算
加法
兩串列相加,其實就是兩串列拼接,在上文講合并串列的時候已經有提過,
list1 = ['a','b','c'] list2 = ['d','e','f'] print(list1 + list2)
列印結果:
['a', 'b', 'c', 'd', 'e', 'f']
兩串列相加等于兩串列拼接,兩字串相加等于兩字串拼接,但是字串是不能和串列相加的,
乘法
將串列與一個整數x相乘,將回傳一個原串列重復x次的新串列(如果x=0,那么將回傳空串列),
list1 = ['a','b','c'] print(list1 * 3)
列印結果:
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
字串也可以這么玩:
name = 'abc' print(name * 3)
列印結果:
abcabcabc
成員資格
檢查一個值是否包含在串列中,可以使用運算子in,這是一個布爾運算子,
words = ['a','b','c','d'] if('c' in words): print('包含c')
列印結果:
包含c
如果要檢查沒有包含在串列中呢?用not來判斷:
words = ['a','b','c','d'] if(not 'xxx' in words): print('這個xxx是沒有的')
列印結果:
這個xxx是沒有的
我們不僅可以檢查串列,還可以檢查字串中是否包含某個字串
words = 'abcdefg' if('bc' in words): print('這個字串包含了bc')
列印結果:
這個字串包含了bc
元組
還有一種特殊的串列,是不可修改的,也就是從定義開始,就不可變的,這種不可變的串列,就叫做元組,
串列的表示方法是中括號:[],去掉中括號就是元組:
words = 'a','b','c' print(words)
列印結果:
('a', 'b', 'c')
元組列印出來的效果就是兩邊被圓括號括起,
也許是考慮到可讀性,python也允許你定義元組的時候用括號把內容括起,這種寫法被普遍采用:
words = ('a','b','c') print(words)
列印結果:
('a', 'b', 'c')
元組的值是不可修改的,就比如你想把('a','b','c')改成('a','c','c'),你如果words[1] = 'c'會報錯,python不允許修改元組,但是你可以給變數重新賦值:words = ('a','c','c')
除了不能修改元組中值,其他使用方式都跟串列一模一樣,
結語
本文涵蓋了python串列的大部分常用知識點,還有一些其他操作比如clear(),copy(),index()等并未加以列出,感興趣的朋友可以自行拓展,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/117803.html
標籤:Python
上一篇:Python 私有屬性和私有方法
下一篇:06.DRF-第一個demo
