標籤: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的資料類型
# 建立字典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