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

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

系統(tǒng) 1593 0

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

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

動態(tài)的:長度可以隨時變化

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

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

簡單來說就是一個常量列表。

字典:無序的鍵值對集合

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

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

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

1、in操作符

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

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

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

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

和if搭配使用。

2、列表的函數(shù)

append函數(shù):

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

remove函數(shù):

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

pop函數(shù):

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

extend函數(shù):

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

insert函數(shù):

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

3、練習

書中給出了一個練習,僅使用以上四個函數(shù),將字符串“Don't panic!”轉換為“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提取出來并保存,因為它們都是要調換位置的;剩余的該刪的,就用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)
            
          

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

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

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

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

4、列表的復制

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

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

這種情況下,B相當于一個指針,指向A,按C++來說,B是A的引用,也就是說,如果對B進行操作,也就是對A進行了同樣的操作。

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

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

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

5、列表的索引

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

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

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

有以下幾種用法:

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

當三個參數(shù)都有值時,按參數(shù)內容控制返回;三參數(shù)的默認值為0,列表允許的最大值,1。

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

當只有stop有值時,僅需[:stop]即可,也只需一個冒號:;

當只有step有值時,則需[::step],需要兩個冒號::。

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

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

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

6、練習

類似上一個練習,再次把"Don't panic!"轉換為"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)
            
          

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

有一點要注意,extend沒有返回值,因此如果寫出了plist=plist.extend(plist1)這種代碼,編譯器會報錯。因為這會將plist變?yōu)榭眨@樣它就不再是一個列表,也就沒有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的內容,僅是新建了一個變量,然后print這個變量。

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

這就相當于利用下標直接提取元素,我蠢了,只會笨比的的用切片,實際上直接利用下標更簡單。

這也可以看出,python十分不喜歡用臨時變量。要注意這一點。

7、列表的迭代

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

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

第二種是對切片循環(huán),也就是for a in A的切片,本質上與上一個也一樣,因為A的切片返回的也是一個列表。

舉例如下的代碼:

            
              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學Python】2、列表數(shù)據(jù):處理有序數(shù)據(jù)_第1張圖片

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

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

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品入口一区二区在线观看 | 99精品视频看国产啪视频 | 女人与zzzooooxxx| 一区二区三区欧美日韩 | 欧美日韩国产一区二区三区欧 | 国产成人免费视频 | 久久这里只有精品免费看青草 | 久久一日本道色综合久久m 久久一色本道亚洲 | 五月激情综合网 | 久久精品加勒比中文字幕 | 亚洲久本草在线中文字幕 | 亚洲综合在线观看一区www | 国产成人亚洲影视在线 | 亚洲啪啪免费视频 | 在线观看国产精品入口 | 亚洲欧美一区二区三区不卡 | 男人的天堂在线视频 | 欧美麻豆久久久久久中文 | 国产精品尹人在线观看免费 | 久久综合精品国产一区二区三区 | 欧美一级毛片片免费 | 最新亚洲情黄在线网站 | 久久精品国产精品青草图片 | 亚洲不卡| 国产91在线 | 亚洲 | 国产永久| 日本人69视频jizz免费看 | 热99精品| 伊人久久波多野结衣中文字幕 | 久久久亚洲欧洲国产 | 日本一视频一区视频二区 | 成人在线免费网站 | 亚洲精品国自产拍影院 | 中文字幕日韩女同互慰视频 | 国产精品福利自产拍网站 | 狠狠色欧美亚洲狠狠色五 | 在线免费观看a视频 | 四虎最新永久在线精品免费 | 久久伊人操 | 久久在线视频 | 成年人一级黄色片 |