目錄
- Python 內置的資料結構
- 二、串列(list)
- 2.1 宣告 list和使用
- 2.2 串列的回圈遍歷
- 2.3 串列的常用操作
- 2.3.1 串列中元素的增刪改
- 2.3.2 連接 list
- 2.3.3 使用索引和切片
- 2.3.4 支持in和not in
- 2.4 嵌套(nested)的list
- 2.5 串列推導(List Comprehensions)
- 2.6 總結
- 二、串列(list)
Python 內置的資料結構
二、串列(list)
想一想:
前面學習的字串可以用來存盤一串資訊,那么想一想,怎樣存盤咱們班所有同學的名字呢?
定義100個變數,每個變數存放一個學生的姓名可行嗎?有更好的辦法嗎?
答:
串列
串列介紹
listpython 中一般把它翻譯為串列.
list 是 python 中用途最廣的一種資料結構,
list 可以存盤多個資料,這些資料用 [ ] 包裹,各個資料之間用 , 分割,
list中的元素可以是任意型別的,但是實際使用的時,一個list 中一般只存盤一種資料型別的資料,
list 中可以存盤的元素是有順序的,且允許重復,
list 中的元素也可以更改,
list的索引從0開始,索引就是資料在串列中的位置編號,索引又可以被稱為下標,從串列中取值時,如果超出索引范圍,程式會報錯
2.1 宣告 list和使用
nums = [10, 20, 40, 30, 25]
print(nums)
print(nums[0]) # 10

內置函式 len 也可以獲取到 list 的長度
獲取串列中某一個元素的數值
串列名[index]
? index:表示串列中元素的下標(或者理解為位置,從0開始,到長度-1,不能越界)
2.2 串列的回圈遍歷
使用for ...in
for 變數名 in 串列名:
print(變數名) # 就是列印輸出串列中的每一個元素
示例代碼:
name_list = ["張三","李四","王五","王二狗"]
for name in name_list:
print("姓名:%s " % name)
使用while回圈
示例代碼:
name_list = ["張三","李四","王五","王二狗"]
index = 0
while index < len(name_list):
print("姓名: %s " % name_list[index])
2.3 串列的常用操作
2.3.1 串列中元素的增刪改
修改list 中的元素
list 和字串不太一樣,字串是不可變的, 而list 是可變的,
我們可以通過索引去更改指定索引位置的元素的值
nums1 = [10, 20, 40, 30, 25]
nums1[2] = 200
print(nums1)

向 list中添加元素和從 list 中洗掉元素
list.append(value) 向 list 的末尾添加元素
list.pop([index]) 把指定索引位置的元素洗掉. 如果不傳入引數就是洗掉最后一個元素
list.insert(index, ele) 把元素 ele 插入到指定的 index 位置,原來的元素會自動右移動
nums1 = [10, 20, 40, 30, 25]
nums1.append(1000)
print(nums1)
nums1.pop(0)
print(nums1)
nums1.insert(2, 2000)
print(nums1)

還有一種洗掉元素的辦法:使用 del 運算子
del關鍵字本質上是用來將一個變數從記憶體中洗掉的,
nums1 = [10, 20, 40, 30, 25]
del nums1[0]
print(nums1)
del nums1[0:2]
print(nums1)

通過切片也可以修改 list 中的元素,甚至清空 list
nums1 = [10, 20, 40, 30, 25]
nums1[:2] = ["A", "B", "C"] # 下標0、1的元素用 ["A", "B", "C"] 去替換
print(nums1)
nums1[:] = [] # clear list
print(nums1)

extend
通過extend可以將另一個集合中的元素逐一添加到串列中
a = [1, 2]
b = [3, 4]
a.append(b) # [1, 2, [3, 4]]
a.extend(b) # [1, 2, [3, 4], 3, 4]
面試題:+= 對于串列的作用
針對于串列:a += b,不是做相加再賦值的操作,本質就是a.extend(b)
2.3.2 連接 list
? list 可以像字串那樣通過 + 連接,得到的新的 list 包含了參與運算的兩個 list 中所有元素
nums1 = [10, 20, 40, 30, 25]
nums2 = [100, 200]
num12 = nums1 + nums2
print(num12)

2.3.3 使用索引和切片
和字串一樣,list 也支持索引讀取和切片,其實內置的序列型別都支持這樣的操作
nums = [10, 20, 40, 30, 25]
print(nums[1])
print(nums[-3])
print(nums[:3])
print(nums[1:])

注意:
? 所有的切片操作都是回傳一個新的 list ,所以我們可以通過切片非常輕松的 copy 一個list
nums = [10, 20, 40, 30, 25]
new_nums = nums[:] # 復制 list nums
print(new_nums)

注意:
這里的復制是淺復制. 其實以后你會發現在, 幾乎所有的復制都是淺復制, 如果要深復制, 需要自己遞回實作.
2.3.4 支持in和not in
nums1 = [10, 20, 40, 30, 25]
print(20 in nums1) # True
print(20 not in nums1) # False
2.4 嵌套(nested)的list
嵌套的意思是,串列中的元素也可以是串列,
因為串列中的元素可以是任意型別,所以嵌套也是很容易理解的,
nums = [[1, 2], [3, 4], [20, 10]]
print(nums)
print(nums[0][0])
print(nums[1][1])

2.5 串列推導(List Comprehensions)
串列推導,有人也叫串列包含,
他提供了一種更加簡潔的方式去創建串列,
串列推導的語法:
[運算式 for item in 序列]
說明:
會對序列中的每個 item 執行運算式, 然后把值存入到一個新的串列中.
舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):
示例代碼1:
nums = list(range(1, 11))
print(nums) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
示例代碼2:求一個數的3次方
nums = [x**3 for x in range(10)]
print(nums)

上面的代碼相當于:
nums = []
for x in range(10):
nums.append(x ** 3)
示例代碼3:
串列推導的時候也可以添加條件:求偶數的平方
nums = [x ** 2 for x in range(20) if x % 2 == 0]
print(nums)

串列推導也支持for 的嵌套
示例代碼4:
s1 = ["a", "b", "c"]
s2 = [20, 30]
s3 = [x + str(y) for x in s1 for y in s2]
print(s3)

注意:
得到的串列的長度是一種笛卡爾積. 也就是說新串列的長度是原串列的長度的乘積.
2.6 總結
通過以上的學習,我們可以看到str和list有許多通用的特點:都支持索引和切片
由于字串是不可變物件,所以字串沒有洗掉的操作,list是可變的,所以提供了洗掉的操作,
| 序號 | 分類 | 關鍵字/函式/方法 | 說明 |
|---|---|---|---|
| 01 | 增加 | 串列.insert(索引,資料) | 在指定位置插入資料 |
| 串列.append(資料) | 在末尾追加資料 | ||
| 串列.extend(串列2) | 將串列2的資料追加到串列 | ||
| 02 | 修改 | 串列[索引] = 新值 | 修改指定索引的資料 |
| 03 | 洗掉 | del 串列[索引] | 洗掉指定索引的資料 |
| 串列.remove[資料] | 洗掉第一個出現的指定資料 | ||
| 串列.pop | 洗掉末尾資料 | ||
| 串列.pop(索引) | 洗掉指定索引資料 | ||
| 串列.clear | 清空串列 | ||
| 04 | 統計 | len(串列) | 串列長度 |
| 串列.count(資料) | 資料在串列中出現的次數 | ||
| 05 | 排序 | 串列.sort() | 升序排序 |
| 串列.sort(reverse=True) | 降序排序 | ||
| 串列.reverse() | 逆序,反轉 | ||
| 06 | 切片 | 串列[start:end] |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162025.html
標籤:Python
下一篇:旋轉陣列-python
