字典和解析式

2021-09-18 06:00:02 字數 3623 閱讀 8976

key-value鍵值對的資料的集合

可變的、無序的key不重複d[key]

返回key對應的值value

key不存在丟擲keyerror異常

get(key[, default])

返回key對應的值value

key不存在返回預設值,如果沒有設定預設值就返回none

setdefault(key[, default])

返回key對應的值value

key不存在,新增kv對,value設定為default,並返回default,如果default沒有設定,預設為none

d[key] = value

將key對應的值修改為value

key不存在新增新的kv對

update([other]) -> none

使用另乙個字典的kv對更新本字典

key不存在,就新增

key存在,覆蓋已經存在的key對應的值

就地修改

pop(key[, default])

key存在,移除它,並返回它的value

key不存在,返回給定的default

default未設定,key不存在則丟擲keyerror異常

popitem()

移除並返回乙個任意的鍵值對

字典為empty,丟擲keyerror異常

clear()

清空字典

總結

python3中,keys、values、items方法返回乙個類似乙個生成器的可迭代物件,不會把函式的返回結果複製到記憶體中

返回dictionary view物件,可以使用len()、iter()、in操作

字典的entry的動態的檢視,字典變化,檢視將反映出這些變化

keys返回乙個類set物件,也就是可以看做乙個set集合。

如果values都可以hash,那麼items也可以看做是類set物件

python2中,上面的方法會返回乙個新的列表,佔據新的記憶體空間。所以python2建議使用iterkeys、

itervalues、iteritems版本,返回乙個迭代器,而不是返回乙個copy

key的要求和set的元素要求一致

set的元素可以就是看做key,set可以看做dict的簡化版

hashable 可雜湊才可以作為key,可以使用hash()測試

d =

collections.defaultdict([default_factory[, …]])

第乙個引數是default_factory,預設是none,它提供乙個初始化函式。當key不存在的時候,會呼叫

這個工廠函式來生成key對應的value

collections.ordereddict([items])

key並不是按照加入的順序排列,可以使用ordereddict記錄順序

有序字典可以記錄元素插入的順序,列印的時候也是按照這個順序輸出列印

3.6版本的python的字典就是記錄key插入的順序(ipython不一定有效果)

對日期、時間、時間戳的處理

datetime類

類方法today() 返回本地時區當前時間的datetime物件

now(tz=none) 返回當前時間的datetime物件,時間到微秒,如果tz為none,返回和today()一樣

utcnow() 沒有時區的當前時間

fromtimestamp(timestamp, tz=none) 從乙個時間戳返回乙個datetime物件

datetime物件

timestamp() 返回乙個到微秒的時間戳。

時間戳:格林威治時間2023年1月1日0點到現在的秒數

標準庫datetime

構造方法 datetime.datetime(2016, 12, 6, 16, 29, 43, 79043)

year、month、day、hour、minute、second、microsecond,取datetime物件的年月日時

分秒及微秒

weekday() 返回星期的天,周一0,週日6

isoweekday() 返回星期的天,周一1,週日7

date() 返回日期date物件

time() 返回時間time物件

replace() 修改並返回新的時間

isocalendar() 返回乙個三元組(年,週數,周的天)

日期格式化*

類方法 strptime(date_string, format) ,返回datetime物件

物件方法 strftime(format) ,返回字串

字串format函式格式化

time.sleep(secs) 將呼叫執行緒掛起指定的秒數

語法[返回值 for 元素 in 可迭代物件 if 條件]

使用中括號,內部是for迴圈,if條件語句可選

返回乙個新的列表

總結

立即計算

返回的不是迭代器,返回可迭代物件列表

從前到後走完一遍後,可以重新回頭迭代

(返回值 for 元素 in 可迭代物件 if 條件)

列表解析式的中括號換成小括號就行了

返回乙個生成器

和列表解析式的區別

生成器表示式是按需計算(或稱惰性求值、延遲計算),需要的時候才計算值

列表解析式是立即返回值

生成器可迭代物件

迭代器

總結:

延遲計算

返回迭代器,可以迭代

從前到後走完一遍後,不能回頭

計算方式

生成器表示式延遲計算,列表解析式立即計算

記憶體占用

單從返回值本身來說,生成器表示式省記憶體,列表解析式返回新的列表

生成器沒有資料,記憶體占用極少,它是使用時乙個個返回資料。如果將這些返回的資料合起來占用的記憶體也和列表解析式差不多。但是,它不需要立即占用這麼多記憶體

列表解析式構造新的列表需要立即占用記憶體,不管你是否立即使用這麼多資料

計算速度

單看計算時間看,生成器表示式耗時非常短,列表解析式耗時長

但是生成器本身並沒有返回任何值,只返回了乙個生成器物件

列表解析式構造並返回了乙個新的列表,所以看起來耗時了

語法列表解析式的中括號換成大括號{}就行了

立即返回乙個集合

語法列表解析式的中括號換成大括號{}就行了

使用key:value形式

立即返回乙個字典

生成器和迭代器是不同的物件,但都是可迭代物件

可迭代物件範圍更大,都可以使用for迴圈遍歷

簡單選擇排序

屬於選擇排序

兩兩比較大小,找出極值(極大值或極小值)被放置在固定的位置,這個固定位置一般指的是某一端

結果分為公升序和降序排列

降序n個數從左至右,索引從0開始到n-1,兩兩依次比較,記錄大值索引,此輪所有數比較完畢,將大數和索引0數交換,如果大數就是索引0,不交換。第二輪,從1開始比較,找到最大值,將它和索引1位置交換,如果它就在索引1位置則不交換。依次類推,每次左邊都會固定下乙個大數。

公升序和降序相反

Python雜湊表和解析式

toc 說明 等號 右邊有多個數值僅通過逗號分割,就會封裝到乙個元組,稱為封裝packing。示例 x 1,y 1,2 print type x x print type y y 輸出結果如下 1,1,2 備註 如果右邊只有乙個數值且沒有用逗號,其實是乙個整數型別,請留意。另外等號右邊一定先執行,再...

解析式(列表 集合 字典)

返回值 for 元素 in可迭代物件 if條件 注 可用多個for迴圈或多個if條件,但不可用if elif 生成乙個列表,元素0 9,對每乙個元素自增1後求平方返回新列表 一般寫法 nums for i in range 10 i 1 2 print nums 列表解析式 nums nums i ...

封裝結構 集合 字典及各種解析式

交換 解構 丟棄變數 總結 set set定義 初始化 set的元素 set增加 update others set刪除 discard elem pop item clear set修改 查詢 set和線性結構 set的元素必須是可hash的 集合 集合運算 交集 intersection upd...