python基礎-02

來源:互聯網
上載者:User

標籤:一點   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.