1. 程式人生 > 其它 >python的列表操作總結

python的列表操作總結

一,列表的基礎操作:

1 empty = []
2 list1 = ['jimei','ruanjian','2021','37']
3 list1[1] = 100#修改元素
4 print(list1)
5 del list1[2]#刪除元素
6 print(list1)
7 list1+=[100,110]#在原來列表的基礎上再加上一個列表
8 list1.append(200)#在末尾新增元素

這裡還是比較簡單沒啥好說的基本操作

1 a = ['a','b','c']
2 n = [1,2,3]
3 x = [a,n]
4 a[0] = 1
5 print(x)
6 print(x[0])
7 print(x[0][1])

這個x其實就是兩個列表的合併,x[0]其實就是a,這個其實和c語言裡二維陣列訪問是一樣的。

1 b = a = [2,1]
2 a+=3
3 print(a,b)
4 a = a+[4,5]
5 print(a)
6 print(b)

一開始的賦值就是b和a指向同一個地方,在a的位置新增元素就是把這個位置的值改變,b也會跟著改變。如果用+=的話就不會發生改變了。

除了加法之外列表肯定還存在乘法:

注意一下,雖然表現形式乘了相應的倍數,但是還是每一個指標是同一個位置,一改全改。

1 a = [1,2,3,4]
2 b = a[1:3]  #從1到2
3 print (b) 4 b[0] = 100 5 print(b) 6 print(a) 7 print(a[::-1])#就相當於反過來列印,最後一個-1的意思是步長為-1 8 print([1,2,3,4,5,6][1:5:2])#從1到4步長為2 9 print(a[:])#就是從頭到尾遍歷

二,列表的排序:

1 def selectsort(a):
2     n = n = len(a)
3     for i in range(n-1):
4         for j in range(i+1,n):
5             if  a[j]<a[i]:
6                 a[i],a[j] = a[j],a[i]
7 lst = [1,12,44,56,6,2] 8 selectsort(lst) 9 print(lst)

上面是py的選擇排序,其實思路和之前的c語言是一樣的只是表示形式不一樣 。但是py提供了很多標準庫中的排序函式供我們使用。

1 a = [5,7,6,3,4,1,2]
2 a.sort()
3 print(a)
4 a = [5,7,6,3,4,1,2]
5 b = sorted(a)
6 print(a)
7 print(b)
8 a.sort(reverse = True) #對a從大到小排序
9 print(a)

要解釋的其實就是第八行了,這個涉及到後面自定義排序,這個reverse其實就有點像一個函式,這個函式的返回值是True的話就可以使sort進行反轉。如果是元組或者是列表作為列表中的元素就是按照列表中元素排列的先後來進行排序。

自定義比較規則的排序常常是用於比較複雜。

1 def mykey(x):
2     return x%10
3 a = [25,7,16,33,41,1,2]
4 a.sort(key = mykey)
5 print(a)
6 b = sorted("This is a test string from Andrew".split(),key = str.lower)
7 print(b)

比如說上面的程式碼,我定義了一個函式會返回一個數的個位上的數,key的作用就是把a中的所有元素作為引數傳入mykey中返回個位上的數,最後這個sort就是按照個位上的數的大小進行排序的了。b就是把這個字串作為列表的形式儲存(split的作用),然後不區分大小寫排序(就是把所有元素全部轉成小寫了)。

1 students = [('john','A',15),('Mike','B',12),('Mike','C',18)]
2 students.sort(key = lambda x: x[2])#按照年齡排序
3 students.sort(key = lambda x :x[0])#按照姓名排序

不同的關鍵字排序,會有不一樣的排序效果。後面就是來說說上面用到的lambda表示式的作用。

其實就是一個簡單函式的寫法咯,把4和5作為引數傳進去之後返回冒號後面的值。

這個就是自定義排序了。這個其實就是排序的選擇先後問題。-x[2]的意思就是按照年齡來從大到小排。但是如果不是列表的話,是元組,使用sort的結果是列表。

三,對映map容器的使用(c++也有所使用)以及列表過濾。

map(function,sequence),可用於將一個序列對映到另一個序列

返回一個延時求值物件,可以轉換成list,tuple(元組),set等等

下面來舉一個例子:

1 def f(x):
2     print(x,end = "")
3     return x*x
4 a = map(f,[1,2,3])
5 print(list(a))
6 print(tuple(a))
7 a = list(map(lambda x:3*x,[2,3,4]))
8 print(a)

在我的理解裡面,這個map說白了就是把後面的列表中的每一個元素作為引數傳入f(x)中,最後返回的值儲存起來賦給一個容器中(可以是列表,元組等),但是這個值並不是一種及時體現的,需要把這些值用一個容器裝起來。

map還能夠用於輸入,如下:

1 x,y,z = map(int,input().split())
2 print(x,y,z)

這個要稍微注意一下,int也是一個function,如int()可以把一個數據轉成int型。後面就是把輸入的x,y,z轉成一個列表中的元素。

map還可以把多個序列對映到一個序列中,這個就是把各個序列的對應值全部加起來,然後放到x這個列表中去。

後面還有一個很酷的東西就是列表過濾。

這個過濾的確很方便,不需要去遍歷刪除。後面舉一個栗子:

1 def f(x):
2     return x%2 == 0
3 lst = tuple(filter(f,[1,2,3,4,5,6]))
4 print(lst)

四,列表生成式:

後面先給一堆例子理解一下:

後面一個個解釋一下把,其實總結起來就是函式放在for迴圈的前面,在for迴圈的後面可以繼續加上for迴圈或者是if的判斷語句。這裡補充一下isinstance函式是用來判斷是不是某個型別的數的。

六,二維列表:

其實和二維陣列差不了太多的,但是可以看一下用列表生成式的二維列表生成

這個和c語言還是有比較大差別的。畢竟這個裡面的函式會更多。但是二維元組的定義會麻煩一點,需要在表示式前面加上tuple,但是也可以理解,畢竟如果只有一個括號的話就會太蒼白了。

七,列表的拷貝:

如果只是這樣進行拷貝的話只是淺層的拷貝,需要進行深層的拷貝的話要連著指標一起拷貝,如果這樣拷貝的話,a與b其實還是指向同一個位置的,這樣如果改變a的值,b的值也會發生改變。所以這裡就要引入一個庫——copy。

引入deepcopy這個函式就能連同指標一起列印。

八,列表轉化:

呼~,寫了一大堆累死了。py的內容的確很雜,但是還是很酷的哈哈哈!