Python自動化開發學習2

來源:互聯網
上載者:User

標籤:python

列表和元祖

列表取值和切片的示範:

strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]print(strings[0])  # 從0開始計數,所以第一個元素是0print(strings[1:4])  # 切片,從起點開始,但是不包括終點print(strings[4:])  # 預設終點,則切到結尾print(strings[:3])  # 也可以預設起點,則從頭開始print(strings[::2])  #  所以頭尾都省了,就是從頭到尾。這裡加上了步長,因為頭尾步長3個參數都省了,那就是列印整個列表print(strings)print(strings[0:5:2])  # 第三個參數是步長,預設1print(strings[-2])  # 取倒數第2個print(strings[-4:-2])  # 永遠是從左往右取,所以-4放前面

追加列表、插入列表、修改列表:

strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]strings.append(‘z‘)  # 在最後追加print(strings)strings.insert(1,‘i1‘)  # 插到1的位置print(strings)strings[4] = ‘D2‘  # 修改print(strings)

刪除列表:

strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]strings.remove(‘c‘)  # 不能刪除不存在的成員print(strings)strings.pop()  # 預設參數,刪除最後一個print(strings)strings.pop(1)  # 如果帶了參數,就是刪除那一個print(strings)del strings[0]  # 也是不能刪除不存在的。這裡和帶參數的pop是一樣的print(strings)

尋找元素:

strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]strings.append(‘e‘)print(strings.count(‘e‘))  # 返回列表中這個元素出現的次數print(strings.index(‘e‘))  # 返回列表中這個元素的位置。但是只有第一個匹配項。但是如果沒找到會報錯print(‘f‘ in strings)  # in 和 not in之前已經學過了。可以做元素是否存在於列表中的判斷print(‘h‘ not in strings)

反轉、合并、排序,最後清空:

strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]print(strings)strings.reverse()  # 反轉列表print(strings)strings.extend([‘2‘,‘!‘,"AA"])  # 合并列表,直接用+號結果也一樣,但是+號有效率問題吧print(strings)strings.sort()  # 排序,元素不能混有數字和字串,否則排序會報錯。這裡是2是字元print(strings)  # 排序按ASCII碼排,符號,數字,大寫,小寫。中文字元排最後strings.clear()  # 清空列表print(strings)

列表的複製使用.copy()

列表裡的元素也可以是另一個列表,下面一起示範

strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]strings.insert(2,[‘A‘,‘B‘,‘C‘])  # 插入一個元素,這個元素是另一個列表strings2 = strings.copy()  # 複製列表print(strings2)strings[0] = ‘apple‘  # 修改原始表的元素strings[2][1] = ‘BOY‘  # 2層列表中的元素是這樣表示的print(strings)print(strings2)  # 注意1層元素沒變,但是2層的元素也變了,雖然之前操作的原始表的元素

列表裡每個元素佔一個空間,1層的元素這個空間存的就是值,copy的時候就是將這個值複製了。但是二層的情況,在一層的表裡也只佔1個元素的位置,這裡存的值就是下面二層表的記憶體位址。所以無論在哪張list裡修改2層的元素,兩張表都會變化。

列表使用賦值=和copy效果是不同的,使用=完全就是複製了記憶體位址,等於只是給這個列表起了一個別名

strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]strings3 = stringsprint(strings3)strings[0] = ‘apple‘  # 修改原始表的元素print(strings)print(strings3)  # 雖然沒修改這張表,但是內容和原始表是一樣的

所以要向真正的複製一張表,需要import copy 這個模組

import copystrings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]strings.insert(2,[‘A‘,‘B‘,‘C‘])  # 插入一個元素,這個元素是另一個列表strings2 = copy.copy(strings)  # 和之前的複製列表一樣strings3 = copy.deepcopy(strings)  # 深copy,這個是我們需要的print(strings2)print(strings3)strings[0] = ‘apple‘  # 修改原始表的元素strings[2][1] = ‘BOY‘  # 修改2層裡的元素print(strings)print(strings2)  # 1層沒變,2層還是被修改了print(strings3)  # 這裡的元素完全不受原始表變化的影響

元組和列表差不多,也是存一組數,只不是它一旦建立,便不能再修改,所以又叫唯讀列表

元組只有count和index這2個方法。

strings1 = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘]  # 這個是列表liststrings2 = (‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘)  # 這個是元祖tupleprint(type(strings1),type(strings2))print(strings1)print(strings2)

可以把那種不希望被修改的資料,比如常量、比如串連參數,存放在元組裡

enumerate()函數

可以方便的一次獲得元素的下標和值,比較實用

strings = [‘a‘,‘b‘,‘c‘,‘d‘]# 下標和值構成了一個元組for i in enumerate(strings):    print(i)print(‘******‘)# 這樣寫,就依次輸出了下標和值,而不是以元組的形式出現了for i,j in enumerate(strings):    print(i,j)print(‘******‘)# 應用的時候還是用index和item,這樣意義比較明確。另外可以帶上一個參數,指定下標的起始值for index,item in enumerate(strings,1):    print(index,item)

字串操作

自動填滿的函數有點用處,先記一下。否則在需要用的時候很有可能要手動填充。

string = "hello"print(string.center(10,‘=‘))  # 內容在中間,兩邊填充print(string.ljust(10,‘=‘))  # 內容在左邊,右邊填充print(string.rjust(10,‘=‘))  # 內容在右邊,左邊填充

參數1定義了字串的長度,不足就用參數2的輸入鍵台。

字典

字典是key:value的資料類型

  • 字典是無序的

  • key必須唯一

# 建立字典dic1 = {}  # 建立一個空的字典dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}print(dic1,dic2)

修改和增加

dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}dic2[‘class‘] = ‘First‘  # 如果key不存在,則增減dic2[‘job‘] = ‘teacher‘  # 如果key存在,則修改print(dic2)

還有一種增加的方法,setdefault,注意下面的參數中間使用的是逗號。只會新增沒有的key,不會修改已有的key

dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}dic2.setdefault(‘name‘,‘Tom‘)  # 最後結果,name並不會被修改dic2.setdefault(‘class‘,‘First‘)  # 最後結果,增加了class這項print(dic2)

刪除:刪除字典內的元素推薦2中方法:

dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}dic2.pop(‘gender‘)del dic2[‘job‘]print(dic2)

尋找也給了2個方法,推薦用get

dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}print(‘job‘ in dic2)  # 返回True,返回字典裡是否有這個keyprint(dic2[‘job‘])  # 返回key的值(Value)。如果key不存在則會報錯print(dic2.get(‘name‘))  # 如果key存在,傳回值print(dic2.get(‘name2‘))  # 如果key不存在,返回None

可以列出所有的key或所有的value

dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}print(dic2.values())print(dic2.keys())

還可以把字典轉成列表

dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}print(dic2.items())

update,合并更新字典。把參數中的表合并更新到前面的表。沒有的key會新增,已有的key和做修改

dic2 = {‘name‘:‘Bob‘,        ‘job‘:‘engineer‘,        ‘gender‘:‘male‘}dic3 = {‘job‘:‘teacher‘,        ‘class‘:‘First‘}print(dic2)print(dic3)dic2.update(dic3)print(dic2)print(dic3)

字典初始化:第一個參數是字典的所有的key,第二個參數是所有value的預設值。這裡第二個參數不要再嵌套元組或列表這類資料類型,否則預設賦的值將會是這個列表或元素的記憶體位址,導致所有的value都是關聯的同一個值

dictmp = {}dic = dictmp.fromkeys([‘name‘,‘job‘,‘gender‘],‘N/A‘)print(dic)






Python自動化開發學習2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.