亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【跟著Head First學(xué)Python】2、列表數(shù)據(jù):處理有序數(shù)據(jù)

系統(tǒng) 1811 0

python自帶了四種數(shù)據(jù)結(jié)構(gòu):列表、字典、元組、集合,本章主要介紹第一種:列表。

列表:有序的、可變的對象集合

動(dòng)態(tài)的:長度可以隨時(shí)變化

異構(gòu)的:數(shù)字與字符串等不同類型的變量可以存在一個(gè)列表里

元組:有序的、不可變的對象集合

簡單來說就是一個(gè)常量列表。

字典:無序的鍵值對集合

就類似C++里面的map。注意字典增加元素的插入順序沒有任何意義。在一個(gè)字典中,鍵的值是唯一的。

集合:無序的、唯一對象的集合

類似C++中的set。但是是沒有順序的。

1、in操作符

使用in操作符來判斷某個(gè)集合中是否存在某元素。

使用not in操作符來判斷某個(gè)集合中是否不存在某元素。

這就和STL中的exist函數(shù)類似,使用方法為

            
              if a in A:
    print(a)
if a not in B:
    print(a)
            
          

和if搭配使用。

2、列表的函數(shù)

append函數(shù):

類似push函數(shù),負(fù)責(zé)在列表的尾端添加元素。

remove函數(shù):

參數(shù)為列表中元素的值,其效果為刪除該值的第一次出現(xiàn),也就是說,對于12233355這樣一個(gè)列表,執(zhí)行remove(5)之后列表會(huì)變?yōu)?223335,第一個(gè)5被刪除了。

pop函數(shù):

比C++的pop函數(shù)功能要強(qiáng)大。首先,默認(rèn)沒有參數(shù)的pop函數(shù)不但會(huì)刪除列表的最后一個(gè)元素,而且會(huì)返回該元素的值;其次,若pop有一個(gè)參數(shù),它會(huì)刪除在參數(shù)位置的元素,并返回其值。也就是說,pop的參數(shù)就是元素的下標(biāo),也就是索引值。

extend函數(shù):

用于合并兩個(gè)列表,其參數(shù)就是一個(gè)列表。若參數(shù)是空列表,則不會(huì)有任何改變,與之形成對比的則是append函數(shù),它的參數(shù)如果是一個(gè)空列表“[]”,那么就會(huì)在原來列表的尾巴加一個(gè)空列表。

insert函數(shù):

有兩個(gè)參數(shù),第一個(gè)參數(shù)是索引值,第二個(gè)參數(shù)是元素值。其用途就是新建一個(gè)列表元素,其值是參數(shù)中的元素值,把這個(gè)列表元素插到索引值之前。

3、練習(xí)

書中給出了一個(gè)練習(xí),僅使用以上四個(gè)函數(shù),將字符串“Don't panic!”轉(zhuǎn)換為“on tap”。

我的代碼如下:

            
              phrase="Don't panic"
plist=list(phrase)
print(phrase)
print(plist)
delspace=plist.pop(5)
plist.remove('D')
plist.remove("'")
deln=plist.pop(1)
plist.remove('n')
plist.remove('i')
plist.remove('c')
plist.insert(1,deln)
plist.insert(2,delspace)
dela=plist.pop()
plist.insert(4,dela)
new_phrase=''.join(plist)
print(plist)
print(new_phrase)
            
          

問題就是刪除或者掉換一些元素的位置。

基本思路就是把空格、n、a用pop提取出來并保存,因?yàn)樗鼈兌际且{(diào)換位置的;剩余的該刪的,就用remove刪了,不刪的就留下。然后用insert再重新插入。很麻煩。

推薦代碼如下:

            
              phrase="Don't panic"
plist=list(phrase)
print(phrase)
print(plist)
for i in range(3):
    plist.pop()
plist.pop(0)
plist.remove("'")
plist.extend([plist.pop(),plist.pop()]
plist.insert(2,plist.pop(3))
new_phrase=''.join(plist)
print(plist)
print(new_phrase)
            
          

首先,它用一個(gè)循環(huán),利用pop刪除了末尾的三個(gè)元素;然后利用pop刪除頭元素;這些都還好;我覺得值得學(xué)習(xí)的一句如下:

            
              plist.extend([plist.pop(),plist.pop()]
            
          

這句話的效果是把ont pa變成了ont ap,也就是說,交換了最后兩個(gè)元素的位置,這里應(yīng)用了pop會(huì)返回元素值的特點(diǎn),利用兩次pop,返回了兩個(gè)值,當(dāng)然它們的順序與在列表中返回了,然后用[]打包一下,用extend函數(shù)直接合并即可。十分簡潔。

這里的join函數(shù)可以理解為把列表轉(zhuǎn)換成了字符串。list函數(shù)把字符串轉(zhuǎn)換成了列表。

4、列表的復(fù)制

注意,python中,有兩種,第一種是直接使用=,如下:

            
              A=[1,2,3]
B=A
            
          

這種情況下,B相當(dāng)于一個(gè)指針,指向A,按C++來說,B是A的引用,也就是說,如果對B進(jìn)行操作,也就是對A進(jìn)行了同樣的操作。

第二種是使用copy函數(shù),如下:

            
              A=[1,2,3]
B=A.copy()
            
          

這種情況下,copy函數(shù)類似C++中的拷貝構(gòu)造函數(shù),也就是說把A的一份復(fù)制給B,這樣對B的操作也就不會(huì)影響到A了。

5、列表的索引

列表可以用中括號記法,當(dāng)索引值為正數(shù)時(shí),這與其他語言類似;但是索引值也可以為負(fù)數(shù),當(dāng)索引值為負(fù)數(shù)時(shí),表示從后往前數(shù)。也就是說,A[-1]表示列表A的最后一個(gè)元素,-2代表尾二等。

類似range,列表也可以用start、stop、step這三個(gè)參數(shù),但是在range中它們使用,隔開,列表的[]中,它們使用:隔開。

如果使用這種記法,相當(dāng)于是一個(gè)函數(shù),返回符合要求的一部分。

有以下幾種用法:

            
              A="Don't panic!"
A[0:10:3]#返回D'pi
A[3:]#返回't panic!
A[:10]#返回Don't pani
A[::2]#返回Dntpnc
            
          

當(dāng)三個(gè)參數(shù)都有值時(shí),按參數(shù)內(nèi)容控制返回;三參數(shù)的默認(rèn)值為0,列表允許的最大值,1。

當(dāng)只有start有值時(shí),僅需[start:]即可,只需一個(gè)冒號:,如果start為正,則代表著從前往后數(shù)第start個(gè)元素開始,一直到最后為止,如果start為負(fù),則代表著從后往前數(shù),第-start個(gè)元素開始,一直到最后為止,注意不是最前;

當(dāng)只有stop有值時(shí),僅需[:stop]即可,也只需一個(gè)冒號:;

當(dāng)只有step有值時(shí),則需[::step],需要兩個(gè)冒號::。

另外,python的注釋是用#,單行注釋;""",三雙引號,多行注釋;''',三單引號,多行注釋的。

在python2中,如果代碼中有中文,還要在開頭加coding=utf-8,但python3中就不用了。

使用這種方法返回的列表的一部分,稱為列表的“切片”。

6、練習(xí)

類似上一個(gè)練習(xí),再次把"Don't panic!"轉(zhuǎn)換為"on tap"。

我的代碼如下:

            
              phrase="Don't panic!"
plist=list(phrase)
print(phrase)
print(plist)
plist1=plist[1:3]
print(plist1)
plist2=plist[5:3:-1]
print(plist2)
plist3=plist[7:5:-1]
print(plist3)
plist1.extend(plist2)
plist1.extend(plist3)
plist=plist1.copy()
phrase=''.join(plist)
print(plist)
print(phrase)
            
          

我的思路就是,拿出三個(gè)切片,然后利用extend合并。

有一點(diǎn)要注意,extend沒有返回值,因此如果寫出了plist=plist.extend(plist1)這種代碼,編譯器會(huì)報(bào)錯(cuò)。因?yàn)檫@會(huì)將plist變?yōu)榭眨@樣它就不再是一個(gè)列表,也就沒有insert等函數(shù)了。

推薦代碼如下:

            
              phrase="Don't panic!"
plist=list(phrase)
print(phrase)
print(plist)
new_phrase=''.join(plist[1:3])
new_phrase=new_phrase+''.join([plist[5],plist[4],plist[7],plist[6]])
print(plist)
print(new_phrase)
            
          

僅用了兩行,但它并沒有更改plist的內(nèi)容,僅是新建了一個(gè)變量,然后print這個(gè)變量。

使用了兩次join函數(shù),第一次拿出了on,第二次利用運(yùn)算符+連接兩個(gè)字符串,join的參數(shù)是一個(gè)列表,列表的元素則是四個(gè)plist列表的元素,將它們一個(gè)一個(gè)從plist中拿出,然后合成一個(gè)新的列表,再轉(zhuǎn)換成字符串,然后連接。

這就相當(dāng)于利用下標(biāo)直接提取元素,我蠢了,只會(huì)笨比的的用切片,實(shí)際上直接利用下標(biāo)更簡單。

這也可以看出,python十分不喜歡用臨時(shí)變量。要注意這一點(diǎn)。

7、列表的迭代

有兩種方式,類似for循環(huán)的兩種方式。

第一種就像for a in A,循環(huán)自己知道,是從列表的第一個(gè)元素開始,循環(huán)到最后一個(gè)元素位置,不用我們?nèi)ジ嬖V它任何事。

第二種是對切片循環(huán),也就是for a in A的切片,本質(zhì)上與上一個(gè)也一樣,因?yàn)锳的切片返回的也是一個(gè)列表。

舉例如下的代碼:

            
              A="Hello world!"
for char in A[:-3]:
    print('\t',char)
print()
for char in A[-7:]:
    print('\t'*2,char)
print()
for char in A[::-3]:
    print('\t'*3,char)

            
          

其效果如下:

【跟著Head First學(xué)Python】2、列表數(shù)據(jù):處理有序數(shù)據(jù)_第1張圖片

也就是說,stop為負(fù)表示從左到右,從頭開始,到stop位置停止,不包括stop;start為負(fù)表示從左到右,從start開始,到末尾停止;step為負(fù)表示從右到左,按step跳過元素。

即,staart和stop的正負(fù)不影響讀取順序,step的正負(fù)才影響讀取順序。

另外。print(),表示空一行,'/t'表示制表符,可以用*2,*3表示多個(gè),很方便。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本亚洲精品一区二区三区 | 色接久久 | 激情九月天 | 老司机深夜影院入口aaaa | aaa级大片| 综合伊人久久 | 久久精品亚洲 | 婷婷的久久五月综合先锋影音 | 中文字幕亚洲视频 | 国产成人高清亚洲一区91 | 久久亚洲国产成人精品性色 | 伊人精品综合 | 天天干天天玩 | 欧美成人香蕉网在线观看 | 久操这里只有精品 | 日韩精品一区在线观看 | 成人永久福利在线观看不卡 | 欧美一级片 在线播放 | 成年女人永久免费观看片 | 亚洲国产成人久久综合一 | 五月婷婷精品 | 久久天堂夜夜一本婷婷麻豆 | 免费看黄色录像 | 国产福利午夜自产拍视频在线 | 欧美福利精品福利视频在线观看 | 特黄特a级特别特级特毛片 特黄特黄aaaa级毛片免费看 | 日日做夜夜做 | 久久爱www人成 | 一级爱爱片一级毛片-一毛 一级白嫩美女毛片免费 | 亚州视频一区二区 | 国产福利不卡 | 老子影院午夜 | 精品久久久久中文字幕日本 | 欧美一级毛片一级 | 老司机久久精品视频 | 天天夜天干天天爽 | 四虎影院视频在线观看 | 自拍视频精品 | 福利视频午夜 | 久操福利| 中文字幕三级久久久久久 |