集 Set集
Set set 翻譯為集合
collection 翻譯為集合類型,是一個大概念
set 是可變的 無序的 不重復的 元素集合
set() 定于一個空集合
set(iterable) 括號里面是可迭代對象
set() 集合里不可以放入可變元素
set()的元素要求必須可以hash
目前學過的不可hasb的類型有list,set
元素不可以索引
set可以迭代
Set 增加
add(elem) 增加一個元素到set
如果元素存在,什么都不做
update(*others)
合并其他元素set集合中來
參數others必須是可迭代對象
就地修改
Set 刪除
remove(elem)
從set中移除一個元素,元素不存在,拋出KeyError異常
discard(elem) 從set中移除一個元素,元素不存在,什么都不做
pop() –> item 移除并返回任意的元素,空集返回keyerror異常
clear() 移除所有元素
Set 修改,查詢
修改,要么刪除,要么加入新的元素
非線性結構無法查詢
遍歷
可迭代所有元素
成員運算符
in和not in 判斷元素是否在set中
Set和線性結構
線性結構的查詢時間復雜度是O(n),即隨著數據規模的增大而增加耗時 set、dict等結構,內部使用hash值作為Key,時間復雜度可以做到O(1) ?查詢時間和數據規模無關
可 hash
數值型 int、float、complex
布爾型 True false
字符串 string bytes
tuple
None
以上都是不可變類型,成為可哈希類型,hashable
set的元素必須是可hash的
集合基本概念
全集:所有元素的集合,例如實數,所有實數組成的集合就是全集
子集subset和超集superset:一個集合A的所有元素都在另一個集合B內,A是B的子集,B是A的集
真子集和真超集:A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集
并集:多個集合合并的結果
交集:多個集合公共部分
差集:集合中除去和其他集合公共部分
封裝和解構
封裝
將多個值使用逗號分割,組合在一起 本質上,返回一個元組,只是省掉了小括號
t1 = (1,2) #定義為元組 t2 = 1,2 ? #將1和2封裝成元組 type(t1) type(t2)
封裝
a = 4
b = 5
temp = a
a = b
b = temp
等價于 ? a,b = b,a
解構
把線性結構的元素解開,并順序的獻給其他 變量 左邊接納的變量數要喝右邊解開的元素個數一致
lis = [2,3]
first,second = lis
print(first,second)
Python3 的解構
使用 *變量名 接收,但不能單獨使用 被 *變量名 收集后組成一個列表
lis = list(range(1,101,2))
head,*mid,stil = lis
變量丟棄
如果不關心一個變量,就可以改變量的名字為 “_”
set的元素必須可以hash
小集合運算 大集合 考慮內存
集合運算
并集:將兩個集合A和B的所有元素合并到一起,組成的集合稱作集合A與集合B的并集
s1 = {1,2,3}
s2 = {2,3,4}
s = s1 | s2 –>{1,2,3,4}
交集:將兩個集合A和B的所有的元素合并到一起,組成的集合稱作集合A與集合B的并集
s1 = {1,2,3}
s2 = {2,3,4}
s = s1&s2 –> {2,3}
差集:將集合A和B,由所有屬于A且不屬于B的元素組成的集合
s1 = {1,2,3}
s2 = {2,3,4}
s = s1-s2 –> {1} s = s2-s1 –> {4}
對稱差集:集合A和B,由所有不屬于A和B的交集元素組成的集合
s1 = {1,2,3}
s2 = {2,3,4}
s = s1^s2 –> {1,4}
issbset(other) <=
判斷當前集合是否是另一個集合的子集
set1 < set2
判斷set1是否是set2的真子集.
issuoerset(other) >=
判斷當前集合是否是other的超集
set1 < set2
判斷set1是否是set的真超集
isdisjoint(other)
當前集合和另一個集合沒有交集
沒有交集,返回True
字典 dictionarise 字典是一個 可變的 無序的 Key不重復的 類方法
dict.formkeys(range(5))
dict.formkeys(rang(5),0)
字典的訪問
d[key]
返回key對應的值vlue key不存在拋出KeyError異常
get(key[,default])
返回key對應的value key不存在返回缺省值,如果沒有設置缺省值就返回None
setdefault(key[,defasult])
返回key對應的值value key不存在,增添kv對,value為default,并返回default,如果default沒有設置,缺省為None
d = {‘a’:’1′,’b’:’2′} e = {‘x’:’3′,’z’:’4′}
d.setdefault(‘d’,10)
print(d)
d.get(‘d’)
字典增加和修改
d[key] = value ?將key對應的值修改為value
key 不存在增加新的kv對
update([other]) –> None
使用另一個字典的kv對更新本字典 key 不存在,就添加 key存在,覆蓋已經存在的key對應的值 就地修改
d = {‘a’:’1′,’b’:’2′}
e = {‘x’:’3′,’z’:’4′}
d.update(e)
print(d)
d.update(e)
print(d)
d = {‘a’:’1′,’b’:’2′}
e = {‘x’:’3′,’z’:’4′}
d.update({‘red’:55})
print(d)
字典的刪除
pop(key[,default])
key存在,移除它,并返回它的value
key不存在,返回給定的default
popitem()
移除并返回一個任意的鍵值對
字典為empty,跑出keyError
clear() 清空字典
字典遍歷
for .. in dict
遍歷 key
for k in d:
print(k)
for k in d.keys():
print(k)
遍歷 value
for k in d:
print(k)
for k in d.keys():
print(d.get(k))
字典的key hashable 可哈希才可以作為key
collections.defaultdict([default_factory[,…]])
第一個參數是default_factory,缺省是None,他提供一個初始化函數,當key不存在的時候,會調用這個工廠函數來生成key對應的value
collections.OrderedDict([items])
key 并不是按照加入的順序排列,可以使用OrdereDict記錄順序 有序字典可以記錄勻速插入的順序,打印的時候也是按照這個順序輸出打印
標準庫
datetime模塊
對日期、時間、時間戳的處理
datetime類
類方法方
today()返回本地時區當前時間的datetime對象
now(tz=None)返回當前時間的datetime對象,時間到微妙,如果tz為None,返回和today()一樣
utcnow()沒有時區的當前時間
fromtimestamp(timestamp,tz=None)從一個時間戳返回一個datetime對象
datetime對象
timestamp()返回一個到微妙的時間戳
時間戳:格林威治時間1970年1月1日0點到現在的秒數
datetime對象
構造方法 datetime.datetime(2016,12,66,16,29,43,79043)
year、month、day、hour、minute、second、microsecond,取datetime對象的年月日時分秒及微妙 weekday() 返回星期的天,周一0,周日6
isoweekday() 返回星期的天,周一1,周日7
date() 返回日期date對象
time() 返回時間time對象
replace() 修改并返回新的時間
isocalendar() 返回一個三元組(年,周數,周的天)
列表解析
生成一個列表0-9,對每一個元素自增1后求平方根返回新的列表
l = [(i+1)**2 for i in (range(10))]
print(l)
print(type(l))
語法
[返回值 for 元素 in 可迭代對象 if]
使用中括號[], 內部是for循環, if條件語句可選 返回一個新的列表
列表解析進階
[expr for item in iterable if cond1 if cond2]
[i for i in range(10) if x%2==0 and if x%3==0]
[exper for i in iterable1 for j in iterable2] [(x,y) for x in ‘abcde’ for y in range(3)]
生成器
語法(返回值 for 元素 in 可迭代對象 if 條件)
列表解析式的中括號換成小括號就行了
返回一個生成器 延遲計算
返回迭代器,可以迭代
從前到后走完一遍,不能回頭
和列表解析式的區別
生成器表達式是按需計算(或稱惰性求職、延遲計算),需要的時候才計算
列表解析式是立即返回值
生成器表達式省內存,列表解析式返回新的列表
集合解析式
{返回值 for 元素 in 可迭代對象 if條件}
列表解析式的中括號換成大括號{}就可以 立即返回一個集合
字典解析式
{返回值 for 元素 in 可迭代對象 if 條件}
列表解析式的中括號換成大括號{}就可以
使用key:value形式 立即返回一個字典
{chr(0x41+x):x**2 for x in range(10)}
內建函數
標識 id 返回對象的唯一標識,CPython返回內存地址
哈希 hash() ?返回一個對象的哈希值 類型 type() ?返回對象的類型
類型轉換
flot()、int()、bin()、hex()、oct()、list()、tuple()、dict()、set() 、comple()、bytes、bytearry()
輸入 input() 接受用戶輸入,返回一個字符串
對象長度 len(s) 返回一個集合類型的元素個數
isinstance(obj,class_or_tuple) 判斷對象obj是否屬于某種類型或者元組中列出的某個類型 isinstance(True,int)
issubclass(cls,class_or_tuple)
判斷類型cls是否是某種類型的子類或元組中列出的某個類型的子類 issubclass(bool,int)
絕對值 abx(x) ? x為數值
最大值 max(x) ? 最小值min()
round(x) 四舍六入五去偶,round(-0.5) pow(x,y)
等價于 x**y sum(iterable[,start]) 對可迭代對象的所有數值元素求和
sum(range(1,100,2))
chr(i) 給一個一定范圍的整數返回對應的字符
chr(97) chr(20013) ord(‘a’) ord(‘中’) ?返回字符對應的整數
sorted(iterable[,key][,reverse]) ?排序
翻轉 reversed(seq)
枚舉
enumerate(seq,start=0)? 迭代一個序列,返回索引數字和元素構成的二元組
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87746