本節主要學習的是:1.列表、元組操作 2.字元串操作 3.字典操作 4.集合操作 5.文件操作 ...
本節內容:
- 列表、元組操作
- 字元串操作
- 字典操作
- 集合操作
- 文件操作
一、列表、元組操作
1. 列表: 列表是我們使用頻率最高的數據類型之一,由一個中括弧 [ ]括起來,裡面的值可以是任何類型(也可以是一個列表)。
列表的創建:
names = ['Island' , 'zhuzhu', 'zhu']
列表的主要使用方法有:增、刪、改、查。
增:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] zhu1 = ['e', 'fg'] zhu.append('a zhu') #第一種方法——.append()括弧內加上所要加的內容,預設加到最後一位。 print(zhu) #結果:['a', 'b', 'c', 1, 2, [3, 'd'], 'a zhu'] zhu.insert(2, 'azhu') #第二種方法——.insert() 在第2個位置前強行加入需要的內容 print(zhu) #結果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu'] zhu.extend(zhu1) #第三種方法——.extend()在zhu列表的後邊擴展zhu1 print(zhu) #結果:['a', 'b', 'azhu', 'c', 1, 2, [3, 'd'], 'a zhu', 'e', 'fg']
刪:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] zhu.remove('c') #刪除指定元素 print(zhu) #結果:['a', 'b', 1, 2, [3, 'd']] del zhu[0] #利用索引值刪除指定元素 print(zhu) #結果:['b', 1, 2, [3, 'd']] zhu.pop() #刪除列表最後一個值 print(zhu) #結果:['b', 1, 2]
改:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] zhu[3] = '變' #利用索引值修改 print(zhu) #結果:['a', 'b', 'c', '變', 2, [3, 'd']]
查:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd']] print('zhu[1]:', zhu[1], '\nzhu[-1]:', zhu[-1]) #:利用索引值查找,索引值為負時表示倒數第n個 (\n為換行) #結果:zhu[1]: b # zhu[-1]: [3, 'd']
統計:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] print(zhu.count('a')) #統計元素個數 #結果:2
獲取下標:
zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] print(zhu.index('a')) #獲取下標 預設從左到右搜索找到的第一個元素,獲取他的下標 #結果:0 print(zhu.index('a',2)) #獲取第二個'a'的下標 #結果:6
排序和反轉:
# zhu = ['a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5'] # zhu.sort() # 結果: # Traceback (most recent call last): # File "C:/Users/48316/PycharmProjects/untitled1/zhu1/text_.py", line 2, in <module> # zhu.sort() # TypeError: unorderable types: int() < str() py3之後不同的數據類型不能排序 zhu = ['a', 'b', 'c', '1', '2', 'a', '2', '5'] zhu.sort() #按照ASCII碼排序 print(zhu) #結果['1', '2', '2', '5', 'a', 'a', 'b', 'c'] zhu.reverse() #反轉 print(zhu) #結果['c', 'b', 'a', 'a', '5', '2', '2', '1']
2.元組:元組其實跟列表差不多,也是存一組數,只不是它一旦創建,便不能再修改,所以又叫只讀列表。它只有2個方法,一個是count,一個是index,完畢。
語法:
zhu = ('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5') #和列表基本類似 只是用圓括弧括起來 print(zhu) #結果:('a', 'b', 'c', 1, 2, [3, 'd'], 'a', 2, '5')
二、字元串操作
特性:不可修改。
各種操作:
#_author: "a zhu" #_date: 2018/2/1 str='abcd EFGH ijk' #直接創建字元串 用引號括起來 print(str.upper()) #將字元串內所有的字元大寫 #結果:ABCD EFGH IJK print(str.casefold())#將字元串內所有的字元小寫 #結果:abcd efgh ijk print(str.capitalize())#將字元串首字母大寫 #結果:Abcd efgh ijk print(str.count(' ')) #統計字元‘ ’出現次數 #結果:2 print(str.endswith('jk'))#判斷字元串是否以'jk'結尾 #結果:True print(str.center(30,'-')) #給字元串兩邊加上'-',一共30個 #結果:--------abcd EFGH ijk--------- print(str.find(' ')) #找到字元' '的索引值,找不到返回-1 #結果:4 msg = "my name is {}, and age is {}." print(msg.format('飛天zhuzhuxia','19')) #結果:my name is 飛天zhuzhuxia, and age is 19. msg = "my name is {1}, and age is {0}." print(msg.format('飛天zhuzhuxia','19')) #結果:my name is 19, and age is 飛天zhuzhuxia. msg = "my name is {name}, and age is {age}." print(msg.format(age='19', name='飛天zhuzhuxia')) #結果:my name is 飛天zhuzhuxia, and age is 19. print(msg.partition('is')) #從'is'出斷開 變為三個元素組成的元組 #結果:('my name ', 'is', ' {name}, and age is {age}.') print(str.ljust(20,'-')) #結果:abcd EFGH ijk------- print(str.rjust(20,'-')) #結果:-------abcd EFGH ijk
三、字典操作
字典一種key - value 的數據類型,使用就像我們上學用的字典,通過筆劃、字母來查對應頁的詳細內容。
字典的特性:
- dict是無序的
- key必須是唯一的,so 天生去重
字典的創建:
dict ={ 'shannxi': 'xian', 'sichuan': 'chengdou', 'hunan': 'zhengzhou', 'shanxi': 'taiyuan', 'beijing': 'sanlitun' } #字典由一對一對的鍵值對組成
字典的增、刪、改、查:
增加:
dict['shanghai'] = '東方明珠'#直接輸入新的鍵值,給簡直賦值就可增加 print(dict) #結果:{'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shannxi': 'xian', 'shanghai': '東方明珠', 'beijing': 'sanlitun'}
刪除:
dict.pop('shanxi') print(dict) #結果:{'sichuan': 'chengdou', 'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'} del dict['sichuan'] print(dict) #結果:{'beijing': 'sanlitun', 'shannxi': 'xian', 'hunan': 'zhengzhou'} dict.popitem()#隨機刪除 print(dict) #結果:{'beijing': 'sanlitun', 'hunan': 'zhengzhou'}
修改:
dict['beijing'] = 'chaoyang' #利用鍵值進行修改 print(dict) #結果:{'beijing': 'chaoyang', 'hunan': 'zhengzhou', 'sichuan': 'chengdou', 'shanxi': 'taiyuan', 'shannxi': 'xian'}
查看:
print(dict['shanxi']) #利用鍵值可以查看 但是如果沒有該鍵值就會報錯 #結果:taiyuan print(dict.get('sichuan1'))#這樣就不會報錯 如果沒有就會返回None
其他:
print(dict.values()) #結果:dict_values(['xian', 'zhengzhou', 'chengdou', 'taiyuan', 'sanlitun']) print(dict.keys()) #結果:dict_keys(['beijing', 'hunan', 'sichuan', 'shanxi', 'shannxi']) b = {1: 2, 3: 4} dict.update(b) print(dict) #結果:{1: 2, 'sichuan': 'chengdou', 3: 4, 'shanxi': 'taiyuan', 'hunan': 'zhengzhou', 'shannxi': 'xian', 'beijing': 'sanlitun'}
迴圈dict:
for key in dict: print(key,dict[key]) '''hunan zhengzhou shannxi xian beijing sanlitun shanxi taiyuan sichuan chengdou''' for k,v in dict.items(): #會先把dict轉成list,數據里大時莫用 print(k,v) '''hunan zhengzhou shannxi xian shanxi taiyuan beijing sanlitun sichuan chengdou'''
四、集合操作
集合是一個無序的,不重覆的數據組合,它的主要作用如下:
- 去重,把一個列表變成集合,就自動去重了
- 關係測試,測試兩組數據之前的交集、差集、並集等關係
各種使用方法:
s = set([3, 5, 9, 10]) # 創建一個數值集合 t = set("Hello") # 創建一個唯一字元的集合 t.add('c') #添加元素 print(t) #結果:{'H', 'c', 'e', 'l', 'o'} s.update([10,37,42]) # 在s中添加多項 print(s) #結果:{3, 37, 5, 9, 10, 42} t.remove('H') #刪除指定元素 print(t) #結果:{'c', 'e', 'l', 'o'} print(len(s)) #set的長度 #結果:6 print('x' in s) #測試x是否是s的成員 #結果:False print('x' not in s ) #測試x是否不是s的成員 #結果:True print(s.issubset(t)) #結果:False #s <= t 測試是否s中的每一個元素都在t中 print(s.issuperset(t))#結果:False #s >= t #測試是否t中的每一個元素都在s中 print(s.union(t)) #結果:{'e', 3, 42, 37, 5, 'l', 'c', 9, 10, 'o'} #s | t 返回一個新的set包含s和t中的每一個元素 print(s.intersection(t))#結果:set() #s & t 返回一個新的set包含s和t中的公共元素 print(s.difference(t))#結果:{3, 5, 37, 9, 10, 42} #s - t 返回一個新的set包含s中有但是t中沒有的元素 print(s.symmetric_difference(t))#結果:{'l', 3, 37, 5, 9, 10, 42, 'e', 'c', 'o'} #s ^ t 返回一個新的set包含s和t中不重覆的元素
五、文件操作
對文件操作流程
- 打開文件,得到文件句柄並賦值給一個變數
- 通過句柄對文件進行操作
- 關閉文件
現在有一個word文件如下:
纖雲弄巧,飛星傳恨,銀漢迢迢暗度。
金風玉露一相逢,便勝卻人間無數。
柔情似水,佳期如夢,忍顧鵲橋歸路。
兩情若是久長時,又豈在朝朝暮暮。
f = open('鵲橋仙') #打開文件 data=f.read()#獲取文件內容 f.close() #關閉文件
註意 if in the win,hello文件是utf8保存的,打開文件時open函數是通過操作系統打開的文件,而win操作系統
預設的是gbk編碼,所以直接打開會亂碼,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,則直接打開即可。
三種最基本的文件打開模式:
# f = open('鵲橋仙2','r') #打開文件 只讀 # f = open('鵲橋仙2','w') #打開文件 只寫 # f = open('鵲橋仙2','a') #打開文件 追加 #如果系統找不到要打開的文件名,則會創建一個文件。
集體操作:
f = open('鵲橋仙') #打開文件 # data1=f.read()#獲取文件內容 # data2=f.read()#獲取文件內容 # # print(data1) # print('...',data2) # data=f.read(5)#獲取文件內容 # data=f.readline() # data=f.readline() # print(f.__iter__().__next__()) # for i in range(5): # print(f.readline()) # data=f.readlines() # for line in f.readlines(): # print(line) # 問題來了:列印所有行,另外第3行後面加上:'end 3' # for index,line in enumerate(f.readlines()): # if index==2: # line=''.join([line.strip(),'end 3']) # print(line.strip()) #切記:以後我們一定都用下麵這種 # count=0 # for line in f: # if count==3: # line=''.join([line.strip(),'end 3']) # print(line.strip()) # count+=1 # print(f.tell()) # print(f.readline()) # print(f.tell())#tell對於英文字元就是占一個,中文字元占三個,區分與read()的不同. # print(f.read(5))#一個中文占三個字元 # print(f.tell()) # f.seek(0) # print(f.read(6))#read後不管是中文字元還是英文字元,都統一算一個單位,read(6),此刻就讀了6個中文字元 #terminal上操作: f = open('鵲橋仙2','w') # f.write('hello \n') # f.flush() # f.write('world') # 應用:進度條 # import time,sys # for i in range(30): # sys.stdout.write("*") # # sys.stdout.flush() # time.sleep(0.1) # f = open('鵲橋仙2','w') # f.truncate()#全部截斷 # f.truncate(5)#全部截斷 # print(f.isatty()) # print(f.seekable()) # print(f.readable()) f.close() #關閉文件
其他的文件模式:
# f = open('鵲橋仙2','w') #打開文件 # f = open('鵲橋仙2','a') #打開文件 # f.write('莫等閑1\n') # f.write('白了少年頭2\n') # f.write('空悲切!3') # f.close() #r+,w+模式 # f = open('鵲橋仙2','r+') #以讀寫模式打開文件 # print(f.read(5))#可讀 # f.write('hello') # print('------') # print(f.read()) # f = open('鵲橋仙2','w+') #以寫讀模式打開文件 # print(f.read(5))#什麼都沒有,因為先格式化了文本 # f.write('hello alex') # print(f.read())#還是read不到 # f.seek(0) # print(f.read()) #w+與a+的區別在於是否在開始覆蓋整個文件 # ok,重點來了,我要給文本第三行後面加一行內容:'hello 岳飛!' # 大家會說,前面不是做過修改了嗎? 大哥,剛纔是修改內容後print,現在是對文件進行修改!!! # f = open('鵲橋仙2','r+') #以寫讀模式打開文件 # f.readline() # f.readline() # f.readline() # print(f.tell()) # f.write('hello 岳飛') # f.close() # 和想的不一樣,不管事!那涉及到文件修改怎麼辦呢? # f_read = open('小重山','r') #以寫讀模式打開文件 # f_write = open('小重山_back','w') #以寫讀模式打開文件 # count=0 # for line in f_read: # if count==3: # f_write.write('hello,岳飛\n') # # else: # f_write.write(line) # another way: # if count==3: # # line='hello,岳飛2\n' # f_write.write(line) # count+=1
文件操作還有許多小點就不一一列舉了。