清單是Python中最基本的資料結構,清單是最常用的Python資料類型,清單是一個資料的集合,集合内可以放任何資料類型,可對集合友善的增删改查操作。Python已經内置确定序列的長度以及确定最大和最小的元素的方法
序号 | 函數 | 描述 |
1 | list.append(self,p_object) | 給清單後面追加新的對象 |
2 | list.clear(self) | 清空清單中的元素 |
3 | list.copy(self) | 淺複制清單 |
4 | list.count(self,value) | 統計某個元素在清單中出現的次數 |
5 | list.extend(self,iterable) | 在清單末尾一次性追加另一個序列中的多個值(用新清單擴充原來的清單) |
6 | list.index(self, value, start=None, stop=None) | 從清單中找出某個值第一個比對項的索引位置 |
7 | list.insert(self,index,start=None,stop=None) | 将對象插入清單 |
8 | list.pop(self,index=None) | 移除清單中的一個元素(預設最後一個),并傳回該元素的值 |
9 | list.remove(self,value) | 移除清單中某個值的第一個比對項,從左找到第一個指定元素 |
10 | list.reverse(self,value) | 反向清單中的元素 |
11 | list.sort(self,key=None,reverse=False) | 對原清單進行排序 |
一,List list()方法
list()方法将元組轉換為清單
注意:元祖與清單是非常相似的,差別在于元組的元素值不能修改,元祖是放在括号中,清單是放在方括号裡面的。
a_tuple = ('123','abc',123)a_list = list(a_tuple)print(a_tuple)print(a_list)結果:('123', 'abc', 123)['123', 'abc', 123]
二,建立一個清單
隻要把逗号分隔的不同的資料項使用方括号括起來即可。如下:
a_list = [1,2,3,4,5,6]b_list = ['a','b','c','d']c_list = ['a','b','c',1,2,3,4]
三,通路清單中的值
與字元串的索引一樣,清單索引從0開始。清單可以進行截取、組合等。使用下标索引來通路清單中的值,同樣你也可以使用方括号的形式截取字元,如下所示:
a_list = [1,2,3,4,5,6]b_list = ['a','b','c','d']c_list = ['a','b','c',1,2,3,4]print(a_list[0])print(b_list[1:3])print(c_list[:])結果:1['b', 'c']['a', 'b', 'c', 1, 2, 3, 4]
四,更新清單
可以對清單的資料項進行修改或更新,你也可以使用append()方法來添加清單項,如下所示:
a_list = [1,2,3,4,5,6]b_list = ['a','b','c','d']c_list = ['a','b','c',1,2,3,4]a_list[0] = 123print(a_list)b_list.append("efg")print(b_list)結果:[123, 2, 3, 4, 5, 6]['a', 'b', 'c', 'd', 'efg']
五,删除清單元素
1,可以使用 del 語句來删除清單的的元素,
2,可以使用pop()移除某元素并傳回該元素,
3,使用remove()删除從左找到的第一個指定元素,如下執行個體:
a_list = [1,2,3,4,5,6]b_list = ['a','b','c','d']c_list = ['a','b','c',1,2,3,4,1]del a_list[2]print(a_list)b = b_list.pop()print(b)c = c_list.pop(2) #也可以删除指定元素,并傳回print(c)d = c_list.remove(1)print(c_list)結果:[1, 2, 4, 5, 6]dc['a','b','c',2,3,4,1]
六,清單腳本操作符
清單對 + 和 * 的操作符與字元串相似。+ 号用于組合清單,* 号用于重複清單。
Python 表達式 | 結果 | 描述 |
---|---|---|
len([1, 2, 3]) | 3 | 長度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 組合 |
['Hi!'] * 4 | ['Hi!', 'Hi!', 'Hi!', 'Hi!'] | 重複 |
3 in [1, 2, 3] | True | 元素是否存在于清單中 |
for x in [1, 2, 3]: print x, | 1 2 3 | 疊代 |
七,清單操作函數
1、cmp(list1, list2):比較兩個清單的元素
2、len(list):清單元素個數
3、max(list):傳回清單元素最大值
4、min(list):傳回清單元素最小值
5、list(seq):将元組轉換為清單
八,清單排序
注意排序優先級:數字>大寫字母>小寫字母>符号>中文
1,永久性排序:sort()
2,臨時性排序:sorted()
3,反轉排序:reverse()
l1 = ["排序","?","123","w","W"]l2 = ['1','2','3']a = l1.sort() #永久性排序,就是這個清單就變了print(l1)b =sorted(l2) #臨時性排序,就是可以指派某個變量print(b)c = l1.reverse()print(l1)結果:['123', '?', 'W', 'w', '排序']['1', '2', '3']['排序', 'w', 'W', '?', '123']
九,周遊清單
除了一般的周遊,還可以周遊切片清單
list=['1','2','3']for value in list:#末尾加上冒号 print(value)#每次循環都把list清單中的值賦給value,指派從索引号0開始#循環的語句需要縮進 結果:123 list=['1','2','3','4','5','6','7']for value in list[3:]:#周遊索引3之後的數值 print(value) 結果:4567
十,建立數值清單
1,使用range()函數生成一系列數值
2,周遊range()函數生成的數值
value=list(range(0,6))#range()生成0~6的數值,list()函數把數值轉換成清單print(value)結果:[0, 1, 2, 3, 4, 5] for value in range(0,6):#range(0,6)順序生成從0到5的數值 print(value)結果:012345 >>> range(1,5)#代表從1到5(不包含5)----------------[1, 2, 3, 4]>>> range(1,5,2) #代表從1到5,每次加2(不包含5)-----[1, 3]>>> range(5) #代表從0到5(不包含5)-----------------[0, 1, 2, 3, 4]
十一,複制清單
1,複制整個清單
2,複制切片清單
list=['1','2','3','4','5']list_2=list[:]#從起始索引到末尾索引print(list_2)結果:['1', '2', '3', '4', '5'] list=['1','2','3','4','5']list_2=list[:]#從起始索引到索引3print(list_2)#輸出['1','2','3']結果:['1', '2', '3', '4', '5']
十二,清單切片
切片操作(slice)可以從一個字元串中擷取子字元串(字元串的一部分)。我們使用一對方括号、起始偏移量start、終止偏移量end 以及可選的步長step 來定義一個分片。
格式:[start:end:step]
- • [:] 提取從開頭(預設位置0)到結尾(預設位置-1)的整個字元串
- • [start:] 從start 提取到結尾
- • [:end] 從開頭提取到end - 1
- • [start:end] 從start 提取到end - 1
- • [start:end:step] 從start 提取到end - 1,每step 個字元提取一個
- • 左側第一個字元的位置/偏移量為0,右側最後一個字元的位置/偏移量為-1
list = [1, 2, 3, 4, 5, 6, 7]>>> list[0:] #列出索引0以後的---------[1, 2, 3, 4, 5, 6, 7]>>> list[1:] #列出索引1以後的---------[2, 3, 4, 5, 6, 7]>>> list[:-1] #列出索引-1之前的-------[1, 2, 3, 4, 5, 6]>>> list[1:3] #列出索引1到3之間的-----[2] #形成reverse函數的效果:>>> list[::-1]#[7, 6, 5, 4, 3, 2, 1]>>> list[::-2]#[7, 5, 3, 1] >>> range(1,5)#代表從1到5(不包含5)----------------[1, 2, 3, 4]>>> range(1,5,2) #代表從1到5,每次加2(不包含5)-----[1, 3]>>> range(5) #代表從0到5(不包含5)-----------------[0, 1, 2, 3, 4]
十三,tuple,dict,list之間的轉換
直接聲明的list和tuple無法通過dict()轉換成dict類型
直接聲明的dict可以通過tuple()和list()分别轉換成tuple和list類型(結果隻包含了keys),可是此時卻能通過dict()反轉回原來的dict類型
13-1、字典
dict = {'name': 'Zara', 'age': 7}#字典轉為字元串str(dict)#字典可以轉為元組tuple(dict)#字典可以轉為元組tuple(dict.values())#字典轉為清單list(dict)#字典轉為清單dict.values
13-2、元組
nums=[1, 3, 5, 7, 9, 11, 13];#清單轉為字元串str(nums)#清單轉為元組tuple(nums)#清單不可以轉為字典
13-4、字元串
str="(1,2,3)"#字元串轉為元組tuple(eval(str))#字元串轉為清單list(eval("(1,2,3)"))#字元串轉為字典str1="{'name':'ljq', 'age':24}"eval(str1)
十四,清單的練習
寫代碼,要求實作下面每一個功能
li=['alex','eric','rain']
1,計算清單長度并輸出
2,清單中追加元素“servn",并輸出添加後的清單
3,請在清單的第一個位置插入元素‘tony’,并輸出添加後的清單
4,請修改清單位置元素‘kelly’,并輸出修改後的清單
5,請在清單删除元素‘eric’,并輸出删除後的清單
6,請删除清單中的第2個元素,并輸出删除後的元素的值和删除元素後的清單
7,請删除清單中的第三個元素,并輸出删除後的清單
8,請删除清單的第2到4個元素,并輸出删除元素後的清單
9,請用for len range輸出清單的索引
10,請使用enumrate輸出清單元素和序号
11,請使用for循環輸出清單中的所有元素
# li = ['alex','eric','rain']# 1,計算清單長度并輸出# print(len(li))# 清單中追加元素“seven”,并輸出添加後的清單# li.append('seven')# print(li)# 請在清單的第1個位置插入元素“Tony”,并輸出添加後的清單# li.insert(1,'tony')# print(li)#請修改清單第2個位置的元素為“Kelly”,并輸出修改後的清單# li[1] ='kelly'# print(li)# 請删除清單中的元素“eric”,并輸出修改後的清單# a =li.pop(2)# print(li)# li.remove('eric')# print(li)# 請删除清單中的第2個元素,并輸出删除元素後的清單# b =li.pop(1)# print(b)# print(li)# 請删除清單中的第2至4個元素,并輸出删除元素後的清單# c = li[2:4]# d = set(li)-set(c)# # print(list(d))# del li[1:4]# print(li)# 請将清單所有的元素反轉,并輸出反轉後的清單# e = li.reverse()# print(li)# 請使用for、len、range輸出清單的索引# for i in range(len(li)):# print(i)# 請使用enumrate輸出清單元素和序号(序号從100開始)# for index in enumerate(li):# print(index)# for index,i in enumerate(li,100):# print(index,i)# for i in li:# print(i)
十五,寫代碼,有如下元組,請按照功能要求實作每一個功能
tu = ('alex','eric,'rain')
1,計算元組的長度并輸出
2,擷取元祖的第二個元素,并輸出
3,擷取元祖的第1-2個元素,并輸出
4,請用for輸出元祖的元素
5,請使用for,len,range輸出元組的索引
6,請使用enumerate輸出元組元素和序号,(從10開始)
tu = ('alex','eric','rain')# 1,計算元組的長度并輸出print(len(tu))# 2,擷取元祖的第二個元素,并輸出print(tu[1])# 3,擷取元祖的第1-2個元素,并輸出print(tu[0:2])# 4,請用for輸出元祖的元素for i in tu: print(i)# 5,請使用for,len,range輸出元組的索引for i in range(len(tu)): print(i)# 6,請使用enumerate輸出元組元素和序号,(從10開始)for index,i in enumerate(tu,10): print(index,i)
十六,list中的append和extend的差別
- list.append(object) 向清單中添加一個對象object
- list.extend(sequence) 把一個序列seq的内容添加到清單中
舉例如下:
使用append的時候,是将new_media看作一個對象,整體打包添加到music_media對象中。
music_media = ['compact disc', '8-track tape', 'long playing record']new_media = ['DVD Audio disc', 'Super Audio CD']music_media.append(new_media)print music_media>>>['compact disc', '8-track tape', 'long playing record', ['DVD Audio disc', 'Super Audio CD']]
使用extend的時候,是将new_media看作一個序列,将這個序列和music_media序列合并,并放在其後面。
music_media = ['compact disc', '8-track tape', 'long playing record']new_media = ['DVD Audio disc', 'Super Audio CD']music_media.extend(new_media)print music_media>>>['compact disc', '8-track tape', 'long playing record', 'DVD Audio disc', 'Super Audio CD']
17 Python 統計清單中的重複項出現的次數的方法
對一個清單,比如[1,2,2,2,2,3,3,3,4,4,4,4],現在我們需要統計這個清單裡的重複項,并且重複了幾次也要統計出來。
方法1:
mylist = [1,2,2,2,2,3,3,3,4,4,4,4]#myset是另外一個清單,裡面的内容是mylist裡面的無重複項myset = set(mylist) for item in myset: res = mylist.count(item) print("the %d has found %d" %(item,mylist.count(item)))
方法2:
List=[1,2,2,2,2,3,3,3,4,4,4,4]a = {}for i in List: if List.count(i)>1: a[i] = List.count(i)print (a)
利用字典的特性來實作。
方法3:
l=[1,4,2,4,2,2,5,2,6,3,3,6,3,6,6,3,3,3,7,8,9,8,7,0,7,1,2,4,7,8,9] count_times = []for i in l : count_times.append(l.count(i)) m = max(count_times)n = l.index(m) print (l[n])
其實作原理就是把清單中的每一個數出現的次數在其對應的位置記錄下來,然後用max求出出現次數最多的位置。隻用這段代碼的話,有一個缺點,如果有多個結果,最後的現實的結果隻是出現在最左邊的那一個,不過解決方法也很簡單。
十八 sort與sorted函數排序的差別
Python list内置sort() 方法用來排序,也可以使用Python内置的全局sorted() 方法對可疊代的序列排序生成新的序列。
sort()函數
首先看一個例子:
lis1 = [3,5,6,8,9]lis1.sort()print(lis1)
使用sort()方法對list排序會修改list本身,不會傳回新list,通常此方法不如sorted()友善,但是如果你不需要保留原來的list,此方法将更有效sort()。sort()方法不能對字典dict進行排序。
sorted() 函數
再看一個例子:
lis1 = [3,5,6,8,9,1]res = sorted(lis1)print(lis1)print(res)# [3, 5, 6, 8, 9, 1]# [1, 3, 5, 6, 8, 9]
sorted()不會改變原來的list,而是會傳回一個新的已經排序好的list。