高級數據類型--列表
- 1列表定義
- 2列表中取值
- 3列表的增,刪,查,改
- 3.1修改指定位置的數據
- 3.2確定指定元素的索引
- 3.3增加操作
- 3.4刪除操作
- 3.5 元素是否存在與列表中 in
- 3.6在指定索引位置插入元素
- 4列表的數據統計
- 5列表排序
- 6列表的循環遍歷-for
- 7多維度list 的切片操作
- 8列表的加法-鏈接
非數值類型:列表,元祖,字典,字符串,都是Python中的高級變量類型
Python中的非數值類型都支持一些共同的操作:都是一個序列,也可以理解為容器,用來裝東西用
列表數據類型的應用場景:存儲多個相同類型的數據,通過迭代遍歷,針對每一項元素,執行相同的操作
注意: 列表中可以存不同類型的數據,但是一般不這么用。
Python中的列表由于其靈活的操作,既可實現堆棧操作(先進后出),還可實現隊列操作(先進先出)
1列表定義
列表-在其他語言中等價于數組,用于存儲一串信息
記錄三個人的名字,可以 用三個字符串變量存儲,也可以用一個列表存儲多個變量
name_list=[“zhangsan”,“lisi”,“wangwu”]
用[]定義列表,其中元素用逗號,分隔
2列表中取值
利用索引取出列表中的元素,索引超出范圍,程序會報錯
name_list[1]
zhangsan
3列表的增,刪,查,改
列表的常用操作包括 :增,刪,查,改。可以通過函數和方法兩種方式來執行常用操作:函數通過函數名()調用,方法通過變量名.方法名調用
3.1修改指定位置的數據
name_list[1]=‘lisisi’
3.2確定指定元素的索引
name_list.index(“lisi”)
使用index方法需要注意,如果傳遞的數據不在列表中,程序會報錯
3.3增加操作
1.向列表的末尾追加數據
name_list.append(“wangxiaoer”)
2.在列表的指定索引位置添加一個數據(添加在0,1之間)
name_list.insert(1,“xiaomeiemi”)
3.將可以迭代的數據增加到當前對象的末尾
temp_list=[“sunwukong”,“zhuerge”,“sanshidia”]
name_list.extend(temp_list)
3.4刪除操作
1.刪除指定的數據,當列表中有多個“zhangsan”,會刪掉一個第一個指定數據
name_list.remove(“wangwu”)
2.pop默認可以將列表中最后一個元素刪除
name_list.pop()
pop方法可以指定索引,刪除元素,同時可以將彈出的元素返回
a=name_list.pop(3)
3.claer方法將列表清空呢
name_list.clear()
name_list=[]
Python2.7版本的編譯器中沒有這個方法偶,如果有,會將列表清空呢
4.擴展: Del 從列表中刪除數據,用于刪除指定索引的元素
del name_list[1]
del本質上是將變量從內存中刪除,如果使用del刪除了一個變量,那么后續就不能使用該變量。慎重使用
3.5 元素是否存在與列表中 in
3.6在指定索引位置插入元素
list.insert(index, obj)
4列表的數據統計
數據統計操作包括一個函數一個方法
1.統計列表數據保存了多少個數據,列表數據的長度
list_len=len(name_list)
print(“列表中包含:%d”%list_len)
2.統計某個數據出現的次數
count=name_list.count(“zhangsan”)
print(“zhangsan 出現了:%d”%count)
5列表排序
新定義兩個列表:
name_list=[“zhangsan”,“lisi”,“wangwu”,“wangxiaoer”]
num_list=[6,8,4,1,10]
默認升序排序,字符串按首字母的順序a-z
name_list.sort()
num_list.sort()
降序輸出
name_list.sort(reverse=True)
num_list.sort(reverse=True)
翻轉(逆序)
name_list.reverse()
num_list.reverse()
翻轉列表一部分內容
#to reverse a part of the string in place
a = [1,2,3,4,5]
a[2:4] = reversed(a[2:4]) # This works!
a[2:4] = [0,0] # This works too.
a[2:4].reverse() # But this doesn’t work
參考資料:https://cloud.tencent.com/developer/ask/53697
索引實現列表逆序
a=[1,2,3,4,5]
a[::-1] # 為a[i:j:s]的缺省表示,i=0,j=len(a),s=-1
參考博文:https://blog.csdn.net/marraybug/article/details/85163484
lambda表達式在sort函數中的使用
假如a是一個由元組構成的列表,對該列表進行排序時,我們需要用到參數key,也就是關鍵詞,如下面代碼所示,lambda是一個匿名函數,是固定寫法;x表示匿名函數的輸入,即列表中的一個元素,在這里,表示一個元組,x只是臨時起的一個名字,你可以使用任意的名字;x[0]表示匿名函數的輸出,即元組里的第一個元素,即key = x[0];所以這句命令的意思就是按照列表中第一個元素進行排序。
a = [(‘b’, 4), (‘a’, 12), (‘d’, 7), (‘h’, 6), (‘j’, 3)]
a.sort(key=lambda x: x[0])
print(a)
#輸出
[(‘a’, 12), (‘b’, 4), (‘d’, 7), (‘h’, 6), (‘j’, 3)]
參考博文:https://www.cnblogs.com/lovewhale1997/p/11424429.html
6列表的循環遍歷-for
循環遍歷:依次從列表中獲取數據,在循環體內部對每個元素執行相同的操作。為了提高列表的遍歷效率,專門提供了迭代iteration遍歷,For能夠實現迭代遍歷。
name_list=["zhangsan","lisi","wangwu","wangxiaoer"]
# 下標迭代遍歷
for i in range(len(name_list)):print("我的名字叫:%s"%name_list[i])
# iteration遍歷, 順序的從列表中依次獲取數據,每一次循環過程中,數據都會保存在my_name
# 通過my_name這個變量中,每次在循環體內部都可以訪問當前這一次獲取到的數據
for my_name in name_list:print("我的名字叫:%s"%my_name)
優點:不需要設計計數器,也不需要對計數器進行操作
7多維度list 的切片操作
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> a // 沒有size,和shape方法
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> a[0]
[1, 2, 3]
>>> a[0][0]
1
>>> a[:2] // 結果是一個list ,再次切片也只是對于第0維度的一個切片
[[1, 2, 3], [4, 5, 6]]
>>> a[:][0] // 并不是想要的所有行,第0列[1,4,7],想要實現這個切片操作,可以將其轉換為numpy數組再操作
[1, 2, 3]
轉換成numpy數組,拼接時沒有list.append()那么直接,需要用numpy.concatenate()進行拼接,但是這個拼接維度的數量不會增加,如果需要多增加一個維度,可以使用[array1,array2,array3]再轉tensor/array的方法進行操作。
8列表的加法-鏈接
兩個鏈表相加,實現兩個鏈表的拼接:
[1,2]+[3,4]
輸出:[1, 2, 3, 4]