python List,它不是一個簡單的陣列
第一次,學python
的時候,我看到列表這個詞語,並不知道這是什麼東西。聽名字,感覺很高大上。當學習列表完,原來只不過就是一個陣列(陣列的升級版)。
List
是python
裡面最基本的資料結構。序列中每個元素都是從索引(下標)從0
開始,依次疊加。
List
操作的方法很多,只能熟悉基本常用的這個方法。
第二個資料結構是元祖,元組其實跟列表差不多,也是存一組數,只不是它一旦建立,便不能再修改,所以又叫只讀列表。
元祖的方法只有count
和index
。
0.建立
# list 有兩種建立方式
# 第一種
list1 = ["1", "2"]
# 第一種方式等同於第二鍾方式,其實也是呼叫第二種方式建立列表
# 第二種
list(("1", "2"))
# 會自動載入建構函式__init__,內部執行for迴圈,把元祖轉換為列表,相當於建立一個列表
1.切片(獲取多個元素)
poets = ["libai", "dufu", "luyou", "wangwei", "sushi", "qinguan", "qinshaoyou", "liyu", "yanshu"]
poets[1:5] # 從下標1開始取,至第5個內(不包括5)1 <= x < 5
# ['dufu', 'luyou', 'wangwei', 'sushi']
poets[-1] # -1直接獲取最後一個元素
# yanshu
poets[3:-1] # 如果想取最後一個元素,不能這樣寫,這樣包含-1在內,應該是這樣寫 poets[3:]
# ['wangwei', 'sushi', 'qinguan', 'qinshaoyou', 'liyu']
poets[::2] # 最後一個引數 相當於步長,每隔元素就取一個
# ['libai', 'luyou', 'sushi', 'qinshaoyou', 'yanshu']
2.追加(在某尾新增一個元素)
poets.append("dumu")
# ['libai', 'dufu', 'luyou', 'wangwei', 'sushi', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu', 'dumu']
# poets = poets.append("dumu") || print(poets.append("dumu")) 該方法沒有返回值,如果這樣操作得到結果為none
3.插入
sancao = ["caozhi", "coacao", "caopi"]
poets.insert(1, sancao)
# ['libai', ['caozhi', 'coacao', 'caopi'], 'dufu', 'luyou',
# 'wangwei', 'sushi', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu', 'dumu']
# 這個方法需要兩個引數,選擇要插入的位置和要插入的元素 如果只用一個引數,會報錯:insert() takes exactly 2 arguments (1 given)
# 第一個引數 只能是數字 不能是字串 否則會報錯: 'str' object cannot be interpreted as an integer
# 第二個引數 可以不填,要填字串,數字都可以,或者列表等等。。。
4.更新
poets[1] = "dufu" # 更新好像沒什麼可以說的,就是這樣,選擇對應下標的元素覆蓋,如果括號沒有輸入索引,會報錯語法錯誤 invalid syntax
# poets[] = "ceishi"
# poets['1'] = "ceishi" # 當然索引只能是整形不能是字串 list indices must be integers or slices, not str
5.移除
poets = ["libai", "dufu", "libai", "luyou"]
poets.remove("libai")
# ['dufu', 'libai', 'luyou']
# 選擇要移除的元素,不是索引,如果有兩個相同元素,只移除第一個匹配項
# 如果不輸入元素,會報錯 x not in list 或者放空 remove() takes exactly one argument (0 given)
poets.pop() # 預設刪除最後一個元素
# ['dufu', 'libai']
poets = ["libai", "dufu", "luyou", "wangwei", "sushi", "qinguan", "qinshaoyou", "liyu", "yanshu"]
poets.pop(4)
# ['libai', 'dufu', 'luyou', 'wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']
sancao = ["caocao", "caozhi", "caopi"]
poets.insert(1, sancao)
# ['libai', ['caocao', 'caozhi', 'caopi'], 'dufu', 'luyou', 'wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']
poets.pop(1) # pop可以刪除巢狀中的列表
# ['libai', 'dufu', 'luyou', 'wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']
del poets[0:3] # 刪除列表的元素,此方法可以一次性刪除多個元素,跟切片道理一樣
# ['wangwei', 'qinguan', 'qinshaoyou', 'liyu', 'yanshu']
6.擴充套件(在列表末尾一次性追加另一個序列中的多個值(用新列表擴充套件原來的列表))
aList = ["liubei", "guanyu", "zhangfei"]
bList = ["zhaoyun", "machao", "huangzhong"]
aList.extend(bList)
# ['liubei', 'guanyu', 'zhangfei', 'zhaoyun', 'machao', 'huangzhong']
aList.extend("bList") # 如果是字串,會把字串分割依次放入列表中
# ['liubei', 'guanyu', 'zhangfei', 'b', 'L', 'i', 's', 't']
aList.extend(1) # int' object is not iterable
7.統計(統計某個元素在列表中出現的次數)
List1 = ["a", "v", "b", "a", "a", " ", "",1]
List1.count("") # 統計元素的個數
# 3
List1.count("") # 如果不填,應該是統計空格 注意" " 和 ""的區別
# 1
List1.count(1) # 也可以統計整形的個數
# 1
8.獲取下標
List1 = ["a", "v", "b", "a", "a", " ", "", 1]
List1.index("a") # 如果有多個相同,至返回第一個元素的下標
# 0
List1.index("")
# 6
List1.index("c") # 如果沒找到,如果沒有找到物件則丟擲異常
9.排序&翻轉(對列表的元素進行反向排序)
List3 = ["lin", "huang", "li", 1, 3, 4]
# List3.sort() # python 版本問題 3.0版本 不支援 數字和字串排序 unorderable types: int() < str()
# python 2.0版本支援 數字和字串排序
List3[3] = '1'
List3[4] = '3'
List3[5] = '4'
List3.sort()
# ['1', '3', '4', 'huang', 'li', 'lin']
List3.reverse()
List3
# ['lin', 'li', 'huang', '4', '3', '1']
10.拷貝
List1 = ['a', 'b', 'c', 2, 3, 4, [8, 9, 4], 'h']
List2 = List1.copy() # 複製一份出來
List2[0] = 'A' # copy只能完整把列表第一層資料複製一份
List2[6][0] = 'k' # 深層裡面列表不會完全複製一份,深層列表都指向同一個記憶體地址。如果深層的資料很大,整個複製不來很佔記憶體
List1
List2
# ['a', 'b', 'c', 2, 3, 4, ['k', 9, 4], 'h']
# ['A', 'b', 'c', 2, 3, 4, ['k', 9, 4], 'h']
# 如果想實現深層列表完全複製一份,必須呼叫第三方庫
# copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。
# copy.deepcopy 深拷貝 拷貝物件及其子物件
import copy
# List3 = List1.deepcopy() # 深copy
11.判斷一個列表是否為空
menghuan = ["jianxiage", "xiaoyaosheng", "gujingling", "shentianbing", "longtaizi"]
if len(menghuan):
print("list have %s element" % len(menghuan))
else:
print("list is empty")
# 由於一個空列表等於false,所以可以簡化len(List)
menghuan = []
if menghuan:
print("not empty")
else:
print("empty")
list1 = ["a", "b", "c", "d", 2, 3, 4, 2, 4, "ds", 23, 23, 12, "qw", "23"]
# 元素是否存在於列表中
if 2 in list1:
num_of_ele = list1.count(2)
position_of_ele = list1.index(2)
print(" [%s] is in list1, position[%s]" % (num_of_ele, position_of_ele))
12.迭代器
# 遍歷列表同時獲取索引
i = 0
for element in list1:
print(element)
i += 1
# 既要遍歷索引又要遍歷元素時 這樣寫更簡潔些
for i, element in enumerate(list1): # enumerate是python的內建函式,在字典上是列舉、列舉的意思
print(i)
print(element)
相關文章
- 陣列的七個 API 的簡單實現陣列API
- 【陣列】1550. 存在連續三個奇數的陣列(簡單)陣列
- Python多個陣列合並(拼接)為一個陣列Python陣列
- 簡單介紹Lua一維陣列與多維陣列的使用陣列
- 【陣列】1608. 特殊陣列的特徵值(簡單)陣列特徵
- Python 列表 list 陣列 array 常用操作集錦Python陣列
- 證明arguments是個物件不是陣列物件陣列
- 18.合併兩個有序陣列(簡單)陣列
- List 和 陣列 的轉換陣列
- 【陣列】1394. 找出陣列中的幸運數(簡單)陣列
- AcWing 242. 一個簡單的整數問題(樹狀陣列解法)陣列
- 陣列[簡單]1550. 存在連續三個奇數的陣列2020/11/14(6)陣列
- 陣列常用方法的簡單封裝陣列封裝
- 構建最簡單陣列陣列
- 【陣列】1539. 第 k 個缺失的正整數(簡單)陣列
- 陣列結構 list () 的替代方法陣列
- 簡單介紹最新python 字串陣列互轉問題Python字串陣列
- List介面(動態陣列)陣列
- YII 初體驗 —— 搭建一個簡單的 Todo List 系統
- 克隆一個陣列的方法陣列
- 陣列轉換成List集合陣列
- Java中List陣列互轉Java陣列
- [Python手撕]有序陣列中的單一元素Python陣列
- 349.兩個陣列的交集|python陣列Python
- 【leetcode 簡單】 第八十五題 兩個陣列的交集 IILeetCode陣列
- Python多個陣列合並Python陣列
- lgP5788 陣列中尋找右側第一個大於它的數陣列
- 一個陣列和另一個陣列比較,如果第一個陣列裡面有的就不新增了陣列
- 【leetcode 簡單】第二十題 合併兩個有序陣列LeetCode陣列
- 好像不是最全的陣列去重方法陣列
- Pet:一個簡單的命令列片段管理器命令列
- 物件陣列 根據key 把一樣的push到一個陣列物件陣列
- 求解一個陣列的所有子集陣列
- python中佇列簡單使用Python佇列
- 將兩個有序陣列合併為一個有序陣列陣列
- 兩個有序陣列如何合併成一個有序陣列陣列
- Java 中陣列轉換為 ListJava陣列
- Java中List與陣列互轉Java陣列