python的基本物件型別介紹
@
目錄python的基本物件型別介紹
字串(strings)
字串中的元素可以索引、切片,但不可修改。
字串之間可以拼接形成新的字串
字串的相關操作
描述 | 示例 |
---|---|
建立空字串 | str=‘’ |
建立Unicode 字串 | str=u'Hello World !' |
字串拼接 | ‘hi’+‘strelitzia’ #結果是‘histrelitzia’ |
字串可使用的一些方法
格式 | 描述 |
---|---|
string.capitalize() | 把字串的第一個字元大寫 |
string.center(width) | 返回一個原字串居中,並使用空格填充至長度 width 的新字串 |
string.count(str, beg=0, end=len(string)) | 返回 str 在 string 裡面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數 |
string.decode(encoding='UTF-8', errors='strict') | 以 encoding 指定的編碼格式解碼 string,如果出錯預設報一個 ValueError 的 異 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace' |
string.encode(encoding='UTF-8', errors='strict') | 以 encoding 指定的編碼格式編碼 string,如果出錯預設報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace' |
string.endswith(obj, beg=0, end=len(string)) | 檢查字串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,返回 True,否則返回 False. |
string.expandtabs(tabsize=8) | 把字串 string 中的 tab 符號轉為空格,tab 符號預設的空格數是 8。 |
string.find(str, beg=0, end=len(string)) | 檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1 |
string.format() | 格式化字串 |
string.index(str, beg=0, end=len(string)) | 跟find()方法一樣,只不過如果str不在 string中會報一個異常. |
string.isalnum() | 如果 string 至少有一個字元並且所有字元都是字母或數字則返回 True,否則返回 False |
string.isalpha() | 如果 string 至少有一個字元並且所有字元都是字母則返回 True, |
string.isdecimal() | 如果 string 只包含十進位制數字則返回 True 否則返回 False. |
string.isdigit() | 如果 string 只包含數字則返回 True 否則返回 False. |
string.islower() | 如果 string 中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False |
string.isnumeric() | 如果 string 中只包含數字字元,則返回 True,否則返回 False |
string.isspace() | 如果 string 中只包含空格,則返回 True,否則返回 False. |
string.istitle() | 如果 string 是標題化的(見 title())則返回 True,否則返回 False |
string.isupper() | 如果 string 中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是大寫,則返回 True,否則返回 False |
string.join(seq) | 以 string 作為分隔符,將 seq 中所有的元素(的字串表示)合併為一個新的字串 |
string.ljust(width) | 返回一個原字串左對齊,並使用空格填充至長度 width 的新字串 |
string.lower() | 轉換 string 中所有大寫字元為小寫. |
string.lstrip() | 截掉 string 左邊的空格 |
string.maketrans(intab, outtab]) | maketrans() 方法用於建立字元對映的轉換表,對於接受兩個引數的最簡單的呼叫方式,第一個引數是字串,表示需要轉換的字元,第二個引數也是字串表示轉換的目標。 |
max(str) | 返回字串 str 中最大的字母。 |
min(str) | 返回字串 str 中最小的字母。 |
string.partition(str) | 有點像 find()和 split()的結合體,從 str 出現的第一個位置起,把 字 符 串 string 分 成 一 個 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string. |
string.replace(str1, str2, num=string.count(str1)) | 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次. |
string.rfind(str, beg=0,end=len(string) ) | string.rfind(str, beg=0,end=len(string) ) |
string.rindex( str, beg=0,end=len(string)) | 類似於 index(),不過是從右邊開始. |
string.rjust(width) | 返回一個原字串右對齊,並使用空格填充至長度 width 的新字串 |
string.rpartition(str) | 類似於 partition()函式,不過是從右邊開始查詢 |
string.rstrip() | 刪除 string 字串末尾的空格. |
string.split(str="", num=string.count(str)) | 以 str 為分隔符切片 string,如果 num 有指定值,則僅分隔 num+ 個子字串 |
string.splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表,如果引數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。 |
string.startswith(obj, beg=0,end=len(string)) | 檢查字串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定範圍內檢查. |
string.strip([obj]) | 在 string 上執行 lstrip()和 rstrip() |
string.swapcase() | 翻轉 string 中的大小寫 |
string.title() | 返回"標題化"的 string,就是說所有單詞都是以大寫開始,其餘字母均為小寫(見 istitle()) |
string.translate(str, del="") | 根據 str 給出的表(包含 256 個字元)轉換 string 的字元, |
string.upper() | 返回一個將原字串全大寫後的新字串 |
string.zfill(width) | 返回長度為 width 的字串,原字串 string 右對齊,前面填充0 |
元組(tuple)
元組(tuple)與列表類似,但元組的元素不能修改。前者使用小括號 ( ),後者使用方括號 [ ]。
元組的括號有時會省略
元組與字串類似,可以被索引且下標索引從0開始,-1 為從末尾開始的位置。也可以進行擷取。可以把字串看作一種特殊的元組。
雖然tuple的元素不可改變,但它可以包含可變的物件,即我們可以對元組中的可變元素(列表、集合、字典)進行操作。示例如下:
a = ([], 2, 'a')
a[0].append(3)
#a[0]=[3]會報錯:TypeError: 'tuple' object does not support item assignment
print(a)
#([3], 2, 'a')
元組的相關操作
描述 | 示例 |
---|---|
建立空元組 | tuple= () |
建立單元素元組 | tuple = (1,) #若不加逗號,則資料型別括號內元素的型別 |
訪問元組中的值 | tuple[0] #返回元組左起第一個元素的值 |
組合元組 | (12,34.56)+('abc','xyz') #得到(12,34.56,'abc','xyz') |
刪除元組元素 | del tuple[0] #刪除元組左起第一個元素 |
刪除元組 | del tuple |
重複元組 | ('Hi!',) * 4 #得到('Hi!', 'Hi!', 'Hi!', 'Hi!') |
判斷元素是否在元組中 | 3 in (1, 2, 3) #返回True或者False |
關於元組的引用
a=(1,)
a+=(2,)
print(a)
#(1, 2)
變數a引用了元組(1,),第二步更改引用為(1,)+(2,)。此時元組(1,)沒有收到任何引用,釋放了記憶體。這種操作並不是改變了元組內元素。
列表(list)
列表寫在方括號 [] 之間,用逗號分隔其中的元素。(元素可以是str、numb,甚至是list)
列表中的元素是可以改變的。
一對中括號的加乘是列表內元素的加乘;兩對中括號的加乘是列表層面的加乘。
用生成式生成列表:
data = [7, 20, 3, 15, 11]
result = [num * 3 for num in data if num > 10]
print(result) # [60, 45, 33]
重複列表的修改問題:
A=[[Q]*3]*5
A[x][y]指向列表[Q,Q,Q]中的第y+1個元素。有5個[Q,Q,Q],無論x為何值,修改會同時應用到5個[Q,Q,Q]上,因為它們實際上都引用同一個地址(儲存著列表[Q,Q,Q])。
A=[[Q,Q,Q],[Q,Q,Q],[Q,Q,Q],[Q,Q,Q],[Q,Q,Q],]
A[x][y]指向列表A中的第x+1個列表[Q,Q,Q]中的第y+1個元素。修改任一[Q,Q,Q],不會影響其他,因為它們引用的是不同的地址。
用列表表示表格
for row,name in enumerate(names):
for col,course in enumerate(courses):
scores[row][col]=float(input(f'請輸入{name}的{course}成績:'))
print(scores)
name有多少元素,就有多少行(row),courses有多少元素,就有多少列(col),scores[row][col]用來依次表示列表scores中第row+1個列表中的第col+1個元素。
列表的相關操作
描述 | 示例 |
---|---|
建立空列表 | list=[] |
訪問列表中的值 | list[0] #返回列表左起第一個元素的值 |
更新列表元素 | list[0] =1 #更改列表左起第一個元素值為1 |
刪除列表元素 | del list[0] #刪除列表左起第一個元素 |
組合列表內的元素 | [1, 2, 3] + [4, 5, 6] #得到[1, 2, 3, 4, 5, 6] |
組合列表 | [[1, 2, 3] ]+ [[4, 5, 6]] #得到[[1, 2, 3], [4, 5, 6]] |
重複列表內的元素 | ['Hi!'] * 4 #得到['Hi!', 'Hi!', 'Hi!', 'Hi!'] |
重複列表 | [['Hi!']]* 4 #得到[['Hi!'], ['Hi!'], ['Hi!'], ['Hi!']] |
判斷元素是否在列表中 | 3 in [1, 2, 3] #返回True或者False |
列表可使用的一些方法
格式 | 描述 |
---|---|
list.append(obj) | 在列表末尾新增新的物件(如果是列表,那麼列表作為一個元素進入) |
list.count(obj) | 統計某個元素在列表中出現的次數 |
list.extend(seq) | 將指定序列中的元素新增進列表中 |
list.index(obj) | 從列表中找出某個值第一個匹配項的索引位置 |
list.insert(index, obj) | 將物件插入列表中index的位置,例如1,代表第二個元素的位置 |
list.pop([index=-1]) | 移除列表中的一個元素(預設最後一個元素),並且返回該元素的值 |
list.remove(obj) | 移除列表中某個值的第一個匹配項 |
list.reverse() | 反向列表中元素(會改變原列表) |
list.sort( key=None, reverse=False) | 對原列表進行排序 |
list.clear() | 清空列表 |
list.copy() | 複製列表 |
集合(set)
集合中的元素具有無序性、互異性、確定性。
因為無序,所以無法索引集合中的元素,但可以用for迴圈遍歷集合中的元素,或者用關鍵字in查詢集合中是否存在某元素。
集合和字典都不支援索引、切片、相加和相乘操作。
集合輸出元素的順序不定
classes={'SA','BO','ZS','ASD'}
for i,c in enumerate(classes):
print(c)
#
BO
ASD
ZS
SA
集合的相關操作
描述 | 示例 |
---|---|
建立空集合 | set_name = set() #直接“={}”建立的是字典 |
刪除集合 | del set_name |
判斷元素是否在集合中 | 3 in {1, 2, 3} #返回True或者False |
集合可使用的一些方法
格式 | 描述 |
---|---|
set.add(x) | 將元素 x 新增到集合 s 中,如果元素已存在,則不進行任何操作 |
set.update([1,2],{3},(4,),{'rule':3}) | 新增列表、集合、元組或字典(key)等的元素到集合中,update(iterable) |
set.remove(x) | 將元素 x 從集合 s 中移除,如果元素不存在,則會發生錯誤 |
set.discard(x) | 移除集合中的元素,且如果元素不存在,不會發生錯誤 |
set.pop() | 隨機刪除集合內的一個元素,並返回該元素。 |
set.clear() | 清空集合 |
set.copy() | 返回一個一模一樣的新集合,它擁有與原集合不同的id地址 |
set1.difference(set2) | 返回集合1與集合2的差集(相當於移除了與集合2重合元素的集合1) |
set1.difference_update(set2) | 移除集合1中與集合2重複的元素 |
set1.intersection(set2,set3…etc) | 返回多個集合的交集 |
set.intersection_update() | intersection() 方法是返回一個新的集合,而 intersection_update() 方法是在原始的集合上移除不重疊的元素 |
set1.isdisjoint(set2) | 判斷集合1和集合2是否存在重合,如果沒有返回 True,否則返回 False |
set1.issubset(set) | 判斷集合2是否為集合1的母集,如果是則返回 True,否則返回 False |
set1.issuperset(set2) | 判斷集合2是否為集合1的子集,如果是則返回 True,否則返回 False |
set1.symmetric_difference(set2) | 返回集合1與集合2的並集,但並集中不存在集合1和集合2的重複元素 |
set1.symmetric_difference_update(set2) | 移除集合1中與集合2重複的元素,然後將集合2的其他元素加入集合1 |
set1.union(set2,set3…etc) | 返回多個集合的並集 |
字典
字典是一種對映型別,字典用 { } 標識,它是一個無序的鍵(key) : 值(value) 的集合。
集合和字典不支援索引、切片、相加和相乘操作。
字典的鍵(key)必須為不可變型別,且不能重複。它可以是 str, int, float, tuples, bool等,不能為list, set, dictionary。
{1,2}是集合,而{1:2}是字典。
遍歷字典
當dict作為遍歷物件時,遍歷的只是它的key,而不包含value。例如sorted函式中,sorted(dict,key= lambda x:x[1])會提示超出字串範圍,原因是遍歷物件沒有value,將x:x[1]改為x:x[0]即可。或者將dict改為dict.items(),便可遍歷到key和value兩部分。
dict.keys(),iterator,只可遍歷key
dict.values(),iterator,只可遍歷value
dict.items(),列表形式的元組陣列,可遍歷key和value。
用zip組合鍵和值來建立字典
keys = ['1001', '1002', '1003']
values = ['駱昊', '王大錘', '白元芳']
d = dict(zip(keys, values))
print(d)
用生成式生成字典
選出price字典中值大於100的鍵值對
print(price_1)
price={
'AARL':191.88,
'GOOD':1186.96,
'IBM':149.24,
'ORCL':48.44,
'ACN':166.89,
'FB':208.09,
'SYMC':21.29
}
price_1={x:y for x,y in price.items() if y>100}
字典的相關操作
描述 | 示例 |
---|---|
建立空字典 | dict_name = {} |
訪問字典裡的值 | dict_name[key] |
增加字典元素 | dict_name[key] = value |
刪除字典元素 | del dict_name[key] |
清空字典 | dict_name.clear() |
刪除字典 | del dict_name |
字典可使用的一些方法
格式 | 描述 |
---|---|
dict.clear() | 刪除字典內所有元素 |
dict.clear() | 刪除字典內所有元素 |
dict.copy() | 返回一個字典的淺複製 |
dict.fromkeys() | 建立一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值 |
dict.get(key, default=None) | 返回指定鍵的值,如果鍵不在字典中返回 default 設定的預設值 |
key in dict | 如果鍵在字典dict裡返回true,否則返回false |
dict.items() | 以列表返回可遍歷的(鍵, 值) 元組陣列。[(a,b),(c,d),(e,f)] |
dict.keys() | dict.keys() |
dict.values() | 以迭代器物件(Python3.x)的形式返回一個字典所有的值。可以使用 list() 來轉換為列表 |
dict.setdefault(key, default=None) | 和get()類似, 但如果鍵不存在於字典中,將會新增鍵並將值設為default,即none |
dict.update(dict2) | 把字典dict2的鍵/值對更新到dict裡 |
pop(key[,default]) | pop(key[,default]) |
popitem() | 隨機返回並刪除字典中的一對鍵和值。返回的形式為(key,value)如果字典已經為空,卻呼叫了此方法,就報出KeyError異常 |
後語
此篇所用許多例子是當初做筆記時在網上找的,每當碰到一些問題,我會在其中作些補充,但準確來說,它只能算作拼接而成的作品。文後本該註明一堆來源,但也不知道當初取自何處,在此向相關作者表示歉意。
文中許多措辭並不嚴謹、統一,以後會再做修改。