標籤:一點 strong /usr -- 先來 資料存放區 xtend off 實現
常見的資料類型
列表
在python中,列表的建立可以是由[]兩個方括弧組成的。在其他語言中,被稱之為數組。
列表裡可以存放一組值,並且系統預設的給列表裡的每一個元素以索引值,方便尋找和使用。
如下:
#建立一個列表,並且儲存一定的資料user_list = [‘劉德華‘,‘張學友‘,‘張靚穎‘,‘郭富城‘,‘李白‘]print(user_list) #[‘劉德華‘, ‘張學友‘, ‘張靚穎‘, ‘郭富城‘, ‘李白‘]#根據索引值來讀取資料print(user_list[0])#劉德華
我們在實際的應用中,可以非常方便的通過索引值來取出自己想要的值。
此時,如果需要在列表中取出多個連續的值,可以採用下面的寫法:
1 #建立儲存了多個值得列表2 3 start_list = [‘劉德華‘,‘張學友‘,‘張靚穎‘,‘郭富城‘,‘李白‘]4 5 #此時,需要取出 張學友到郭富城6 s_list = start_list[1:4]7 8 print(s_list) # [‘張學友‘, ‘張靚穎‘, ‘郭富城‘]
在上面的代碼中,在取值的時候,我們使用了1:4,索引值從張學友的1到李白的4,但是李白卻沒有被選取到,此時的原則是顧頭不顧尾
而這樣的一種操作,我們稱之為切片
Tip:在進行切片 操作後,並不會改變原本的數組。
那麼從左邊開始取值,索引值從0開始,如果從右邊開始取值,索引值從-1開始。
如果需要從右向左取值,有一點需要注意,例如:
#建立儲存了多個值得列表start_list = [‘劉德華‘,‘張學友‘,‘張靚穎‘,‘郭富城‘,‘李白‘]
想要取值從右向左李白到張靚穎,寫法如下:
n_list = start_list[-3:]print(n_list)
從右向左,李白是-1 ,那麼將-1省略,要取值到張靚穎,那麼張靚穎的索引為-3,那麼就寫成[-3:] 。
同理,如果從左向右取值,前面如果是0,也是可以省略的。
追加
如果我們需要給列表裡面追加一些元素,可以使用append方法,向列表的最後追加一些元素。
#建立一個列表user_list = [‘宋小寶‘,‘趙四‘,‘劉能‘,‘小瀋陽‘]#向列表中追加元素user_list.append(‘趙本山‘)#檢測原列表是否被改變print(user_list)
輸出的結果:
[‘宋小寶‘, ‘趙四‘, ‘劉能‘, ‘小瀋陽‘, ‘趙本山‘]
新追加的內容已經被追加到列表的最後。
如果需要將某個元素插入到某個元素之前,可以使用insert方法。
如下:
user_list = [‘宋小寶‘,‘趙四‘,‘劉能‘,‘小瀋陽‘]#將添加的內容添加到趙四的前面user_list.insert(1,‘趙本山‘)print(user_list)
結果如下:
[‘宋小寶‘, ‘趙本山‘, ‘趙四‘, ‘劉能‘, ‘小瀋陽‘]
新的資料已經添加成功。
改
如果需要修改列表中的某一項,可以直接通過索引值找到元素並且直接賦予新值即可。
如下:
user_list[0] = ‘二人轉‘
刪除
如果需要刪除列表中的元素,可以採用remove ,del 或者pop方式。
remove方法:
#建立一個列表user_list = [‘測試1‘,‘測試2‘,‘測試3‘,‘測試4‘]#使用remove方式刪除元素user_list.remove(‘測試1‘)print(user_list)
del方法:
#建立一個列表user_list = [‘測試1‘,‘測試2‘,‘測試3‘,‘測試4‘]#使用del 方法刪除 del user_list[1]print(user_list)
pop方法:
#建立一個列表user_list = [‘測試1‘,‘測試2‘,‘測試3‘,‘測試4‘]#使用pop方法刪除user_list.pop()print(user_list)
Tip:上面的pop方法此時沒有傳遞參數,會預設的把列表中最後一個值刪除,當然,pop()方法中同樣接受傳入參數[列表的索引值],所以一旦pop傳入了索引值,那麼它的功能效果就等同於del方法。
總結
增
使用append方法,insert方法
刪除
使用remove ,del以及pop方法
改
直接使用索引值找到元素並且賦予新值
查
通過索引值的方式可以查詢資料
我們也可以通過index方法來查詢某個元素的在列表中的索引值。
如下:
#建立列表user_list = [‘測試1‘,‘測試2‘,‘測試3‘]index_user = user_list.index(‘測試2‘)print(index_user) # 1
在列表中,如果想要查看某個元素出現的次數,可以使用count方法
如下:
#建立列表user_list = [‘測試1‘,‘測試2‘,‘測試3‘,‘測試2‘,‘測試3‘]# 使用count方法統計一個元素在列表中出現的次數num = user_list.count(‘測試2‘)print(num) # 2 表示測試2 出現了兩次
清空列表
python中清空列表可以使用clear方法
如下:
#建立列表user_list = [‘測試1‘,‘測試2‘,‘測試3‘,‘測試2‘,‘測試3‘]#使用clear方法清空列表user_list.clear();#檢查列表是否被清空print(user_list) #顯示為[] ,說明列表已經被成功清空了
反轉列表
python中反轉列表使用reverse方法
如下:
#建立列表user_list = [‘測試1‘,‘測試2‘,‘測試3‘,‘測試2‘,‘測試3‘]#使用reverse方法反轉列表user_list.reverse()print(user_list)
排序
python中列表的排序可以使用sort方法
如下:
#建立列表list = [‘2Ceshi2‘,‘#Ceshi1‘,‘ACeshi3‘,‘aCeshi4‘]list.sort()print(list)
結果如下:
[‘#Ceshi1‘, ‘2Ceshi2‘, ‘ACeshi3‘, ‘aCeshi4‘]
那麼排序的順序其實是按照ASCII碼的順序進行排序。
合并列表
python中列表可以進行合并,使用extend方法
如下:
#建立列表list = [‘2Ceshi2‘,‘#Ceshi1‘,‘ACeshi3‘,‘aCeshi4‘]#建立第二個列表test_list = [1,2,3,4]#將第二個列表合并到list列表中list.extend(test_list)print(list,test_list)
上述代碼中,test_list 順利的被合并到list中,而原本的test_list列表依然存在。
刪除整個列表
如下:
del 列表的名字
複製
python中,實現列表的複製,可以使用copy方法,而copy方法分為深層複製和淺層複製。
先來看下淺層複製:
1 ‘‘‘ 2 copy()方法 複製 3 4 淺層複製 5 6 列表中還可以存在列表,也可以存在其他的資料類型,而淺層複製指的是僅複製第一層,而第二層列表 7 中的內容僅複製指向記憶體位址的指標 8 ‘‘‘ 9 10 # 建立一個列表11 test_list = [‘alex‘,‘LiBai‘,‘Zhangxueyou‘,‘Zhaosi‘]12 13 test2 = test_list.copy()14 15 print(test2) #[‘alex‘, ‘LiBai‘, ‘Zhangxueyou‘, ‘Zhaosi‘]16 17 # 更改第一層列表中的某個元素值18 test_list[0] = ‘hello,world‘19 20 # 檢查是否更改成功21 print(test_list) # 成功22 23 #檢查test2是否更改第一個元素24 print(test2) # 第二個列表沒有更改
此時在上面的代碼中,列表test_list第一個值進行了更改,而test2列表複製過來的第一個值則沒有更改。
如果列表test_list中還存在一個列表,在淺層複製的情況下,會出現如下的情況:
# 建立一個列表 - 並且列表中存在二級的列表test_list = [‘alex‘,‘LiBai‘,‘Zhangxueyou‘,‘Zhaosi‘,[‘Nihao‘,‘yanyan‘]]test2 = test_list.copy() # 第一個列表已經全部被複製了過來# 更改第一個列表中子集列表的值test_list[4][0] = [‘NIHAO‘]# 查看test2列表是否更改print(test2)
發現此時test2列表已經更改:
[‘alex‘, ‘LiBai‘, ‘Zhangxueyou‘, ‘Zhaosi‘, [[‘NIHAO‘], ‘yanyan‘]]
原因是此時的複製是淺層複製,只複製到了第一層,第二層裡面的列表並沒有進行複製,只是複製了一個指向記憶體方向的指標。
深層複製需要引入copy模組
代碼如下:
import copy# 建立列表list_user = [‘alex‘,‘libai‘,‘zhaobenshan‘,[‘yanyan‘,‘yuping‘]]# 進行深層複製new_list = copy.deepcopy(list_user)#print(new_list) # 複製成功# 更改第一組列表list_user[3][0] = "YANYAN"print(list_user)print(new_list)
通過引入copy模組,並且使用deepcopy方法即可實現深層複製
迴圈列表
列表的迴圈使用for..in 即可。
代碼如下:
# 建立列表test_list = [‘alex‘,‘libai‘,‘shaopengtao‘,‘wangmengchan‘]for i in test_list: print(i) # 迴圈成功
補充:代碼切片
我們在列印列表的時候,可以使用切片的方式,例如
test_list = [‘alex‘,‘libai‘,‘shaopengtao‘,‘wangmengchan‘]
有這樣的一個列表,然後現在想將列表0到-1的位置進行切片,
print(0:-1)
那麼此時如果想要在切片的基礎上進行每兩個選取一個,代碼可以寫成如下:
print(0:-1:2)
那麼最終實現的效果如下:
[‘alex‘, ‘shaopengtao‘]
那麼在切片的過程中,如果開始或者結束的位置是0或者-1是可以被省略的,所以上面的代碼就變成了如下:
print(::2)
結果同樣是不變的。
知識點補充和總結:
上面我們說到,淺層複製的使用,其實在實際應用的情景下大概有三種方式可以實現淺層複製,例如下面的示範代碼,將示範三種淺層複製的情況:
1 import copy 2 # 建立列表 3 test_list = [‘name‘,[‘deposit‘,100]] 4 5 ‘‘‘ 6 實現淺層複製的三種寫法: 7 8 copy方法 9 [:]10 list11 ‘‘‘12 ‘‘‘13 # 第一種方式,使用copy.copy14 new_list = copy.copy(test_list)15 print(new_list)16 ‘‘‘17 ‘‘‘18 #第二種方式19 new_list = test_list[:]20 print(new_list)21 ‘‘‘22 23 #第三種方式24 new_list = list(test_list)25 print(new_list)
淺層複製的應用
例如,夫妻之間有一個共同的銀行賬戶,裡面有著共同的財產,其中一個人取錢或者存錢,那麼另一放的餘額顯示肯定是要更改的。
代碼如下:
# 建立列表,示範夫妻共用一個銀行賬戶的需求money = [‘name‘,[‘deposit‘,2000]]# 建立兩個不同的人libai = money[:]yanyan = money[:]#此時當丈夫libai 取了1000塊libai[0] = ‘LiBai‘libai[1][1] = 2000 - 1000yanyan[0] = ‘Yanyan‘# 此時無論是丈夫libai還是妻子yanyan的銀行存款餘額都會變少,因為二人共用一個賬戶print(libai)print(yanyan)
說的簡單點,就是通過淺層複製來實現共用帳號,當然,上面的應用只是簡單的舉個例子,在實際中,銀行也不會將資料存放區在列表中。
元組(tuple)
元組其實類似於列表,也就是存一組數,只不過它一旦建立,便不能再次修改,所以又叫做唯讀列表。
元組本身只能切片和查詢但是不能夠更改。
代碼如下:
names = (‘Alex‘,‘Libai‘,‘Jack‘)
在元組這個對象裡面,只有兩個方法,一個是count,一個是index。
小練習:購物車
需求:
代碼如下:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Li Bai 4 5 # 建立列表 6 product_list = [ 7 (‘Iphone‘,5800), 8 (‘Mac Pro‘,9800), 9 (‘Bike‘,800),10 (‘Watch‘,10600),11 (‘Coffee‘,31),12 ]13 14 # 建立一個空列表,用來儲存使用者購買的商品15 shopping_list = []16 17 salary = input(‘Input your Salary:‘)18 # 判斷使用者輸入的是否是數字19 if salary.isdigit():20 # 將使用者輸入的轉換為int整型21 salary = int(salary)22 # 迴圈輸出資料行表23 while True:24 # 輸出商品列表中的內容和索引值25 for index,item in enumerate(product_list):26 # 輸出27 print(index,item)28 user_choice = input(‘你好,請輸入購買的商品序號:‘)29 # 判斷使用者輸入的是否為序號數字30 if user_choice.isdigit():31 user_choice = int(user_choice)32 # 判斷使用者輸入的商品序號是否是合理的33 if user_choice < len(product_list) and user_choice >= 0:34 print(user_choice)35 p_item = product_list[user_choice]36 # 判斷使用者的財產是否足夠37 if p_item[1] <= salary: # 買的起38 shopping_list.append(p_item) # 將使用者選取的商品存進shopp_list列表39 salary -=p_item[1] # 將財產減去購買的商品列表40 # 列印財產餘額41 print("Add %s into shopping cart ,your current balance is %s" %(p_item,salary))42 else :43 print(‘你的餘額只剩%s,餘額不足‘% salary)44 else :45 print("product code [%s] is not exist!"% user_choice)46 elif user_choice == ‘q‘:47 print("--------shopping list------")48 for p in shopping_list:49 print(p)50 print("Your current balance:",salary)51 exit()52 else:53 print("invalid option")
python基礎-02