python第三周笔记_Python第三周 学习笔记(1)
key-value鍵值對(duì)的數(shù)據(jù)的集合
可變的、無序的、key不重復(fù)
初始化:
d = dict()
d = {}
d = dict(**kwargs) 如:d = dict(a=1,b=2)
dict(iterable, **kwarg)
使用可迭代對(duì)象和name=value對(duì)構(gòu)造字典,不過可迭代對(duì)象的元素必須是一個(gè)二元結(jié)構(gòu)
dict(mapping, **kwarg)
dict.fromkeys(iterable, value)
字典元素的訪問
d[key]
返回key對(duì)應(yīng)的值value
key不存在拋出KeyError異常
get(key[, default])
返回key對(duì)應(yīng)的值value
key不存在返回缺省值,如果沒有設(shè)置缺省值就返回None
setdefault(key[, default])
返回key對(duì)應(yīng)的值value
key不存在,添加kv對(duì),value為default,并返回default,如果default沒有設(shè)置,缺省為None
字典增加和修改
d[key] = value
將key對(duì)應(yīng)的值修改為value
key不存在添加新的kv對(duì)
update([other]) -> None
使用另一個(gè)字典的kv對(duì)更新本字典
key不存在,就添加
key存在,覆蓋已經(jīng)存在的key對(duì)應(yīng)的值
就地修改
d.update(red=1)
d.update(((‘red‘,2),))
d.update({‘red‘:3})
字典刪除
pop(key[, default])
key存在,移除它,并返回它的value
key不存在,返回給定的default
default未設(shè)置,key不存在則拋出KeyError異常
popitem()
移除并返回一個(gè)任意的鍵值對(duì)
字典為empty,拋出KeyError異常
clear()
清空字典
del語(yǔ)句
本質(zhì)上減少了一個(gè)對(duì)象的引用,del 實(shí)際上刪除的是名稱,而不是對(duì)象
字典遍歷:
遍歷key:
for k in d:
print(k)
for k in d.keys():
print(k)
遍歷values:
for k in d:
print(d[k])
for k in d:
print(d.get(k))
for v in d.values():
print(v)
*遍歷item,即kv對(duì):
for item in d.items():
print(item)
for item in d.items():
print(item[0], item[1])
for k,v in d.items():
print(k, v)
for k, _ in d.items():
print(k)
for _ ,v in d.items():
print(v)
總結(jié)
Python3中,keys、values、items方法返回一個(gè)類似一個(gè)生成器的可迭代對(duì)象,不會(huì)把函數(shù)的返回結(jié)果復(fù)制到內(nèi)存中
Dictionary view對(duì)象
字典的entry的動(dòng)態(tài)的視圖,字典變化,視圖將反映出這些變化
字典遍歷和移除
遍歷字典時(shí),不允許增刪元素
可先記錄key值再遍歷刪除
d = dict(a=1, b=2, c=‘a(chǎn)bc‘)
keys = []
for k,v in d.items():
if isinstance(v, str):
keys.append(k)
for k in keys:
d.pop(k)
print(d)
defaultdict
collections.defaultdict([default_factory[, ...]])
第一個(gè)參數(shù)是default_factory,缺省是None,它提供一個(gè)初始化函數(shù)。當(dāng)key不存在的時(shí)候,會(huì)調(diào)用這個(gè)工廠函數(shù)來生成key對(duì)應(yīng)的value
ordereddict
collections.OrderedDict([items])
key并不是按照加入的順序排列,可以使用OrderedDict記錄順序
標(biāo)準(zhǔn)庫(kù)datetime
datetime模塊
datetime類
today()
返回本地時(shí)區(qū)當(dāng)前時(shí)間的datetime對(duì)象
now(tz=None)
返回當(dāng)前時(shí)間的datetime對(duì)象,時(shí)間到微秒,如果tz為None,返回和today()一樣
fromtimestamp(timestamp, tz=None) 從一個(gè)時(shí)間戳返回一個(gè)datetime對(duì)象
日期格式化
類方法 strptime(date_string, format) ,返回datetime對(duì)象
對(duì)象方法 strftime(format) ,返回字符串
字符串format函數(shù)格式化
import datetime
dt = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
print(dt.strftime("%Y-%m-%d %H:%M:%S"))
print("{0:%Y}/{0:%m}/{0:%d} {0:%H}::{0:%M}::{0:%S}".format(dt))
timedelta對(duì)象
與datetime對(duì)象做加減運(yùn)算
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0,minutes=0, hours=0, weeks=0)
total_seconds() 返回時(shí)間差的總秒數(shù)
標(biāo)準(zhǔn)庫(kù)time
time.sleep(secs) 將調(diào)用線程掛起指定的秒數(shù)
列表解析式
語(yǔ)法
[返回值 for 元素 in 可迭代對(duì)象 if 條件]
使用中括號(hào)[],內(nèi)部是for循環(huán),if條件語(yǔ)句可選
返回一個(gè)新的列表
列表解析式是一種語(yǔ)法糖
編譯器會(huì)優(yōu)化,不會(huì)因?yàn)楹?jiǎn)寫而影響效率,反而因優(yōu)化提高了效率
減少程序員工作量,減少出錯(cuò)
簡(jiǎn)化了代碼,但可讀性增強(qiáng)
列表解析進(jìn)階
[expr for item in iterable if cond1 if cond2]
等價(jià)于
ret = []
for item in iterable:
if cond1:
if cond2:
ret.append(expr)
[expr for i in iterable1 for j in iterable2 ]
等價(jià)于
ret = []
for i in iterable1:
for j in iterable2:
ret.append(expr)
生成器表達(dá)式
(返回值 for 元素 in 可迭代對(duì)象 if 條件)
生成器表達(dá)式是按需計(jì)算(或稱惰性求值、延遲計(jì)算),需要的時(shí)候才計(jì)算值
列表解析式是立即返回值
生成器是可迭代對(duì)象、迭代器
使用next(itetator)迭代
生成器迭代與列表迭代對(duì)比
生成器
延遲計(jì)算
返回迭代器,可以迭代
從前到后走完一遍后,不能回頭
列表
立即計(jì)算
返回的不是迭代器,返回可迭代對(duì)象列表
從前到后走完一遍后,可以重新回頭迭代
計(jì)算方式
生成器表達(dá)式延遲計(jì)算,列表解析式立即計(jì)算
內(nèi)存占用
單從返回值本身來說,生成器表達(dá)式省內(nèi)存,列表解析式返回新的列表
生成器沒有數(shù)據(jù),內(nèi)存占用極少,但是使用的時(shí)候,雖然一個(gè)個(gè)返回?cái)?shù)據(jù),但是合起來占用的內(nèi)存也差不多
列表解析式構(gòu)造新的列表需要占用內(nèi)存
計(jì)算速度
單看計(jì)算時(shí)間看,生成器表達(dá)式耗時(shí)非常短,列表解析式耗時(shí)長(zhǎng)
但是生成器本身并沒有返回任何值,只返回了一個(gè)生成器對(duì)象
列表解析式構(gòu)造并返回了一個(gè)新的列表
集合解析式
{返回值 for 元素 in 可迭代對(duì)象 if 條件}
立即返回一個(gè)集合
字典解析式
{返回值 for 元素 in 可迭代對(duì)象 if 條件}
使用key:value形式
立即返回一個(gè)字典
內(nèi)建函數(shù)
標(biāo)識(shí) id
返回對(duì)象的唯一標(biāo)識(shí),CPython返回內(nèi)存地址
哈希 hash()
返回一個(gè)對(duì)象的哈希值
類型 type()
返回對(duì)象的類型
類型轉(zhuǎn)換
float() int() bin() hex() oct() bool() list() tuple() dict() set() complex() bytes() bytearray()
輸入 input([prompt])
接收用戶輸入,返回一個(gè)字符串
打印 print(*objects, sep=‘ ‘, end=‘\n‘, file=sys.stdout, flush=False)
打印輸出,默認(rèn)使用空格分割、換行結(jié)尾,輸出到控制臺(tái)
對(duì)象長(zhǎng)度 len(s)
返回一個(gè)集合類型的元素個(gè)數(shù)
isinstance(obj, class_or_tuple)
判斷對(duì)象obj是否屬于某種類型或者元組中列出的某個(gè)類型
isinstance(True, int)
issubclass(cls, class_or_tuple)
判斷類型cls是否是某種類型的子類或元組中列出的某個(gè)類型的子類
issubclass(bool, int)
絕對(duì)值abs(x)
x為數(shù)值
最大值max() 最小值min()
返回可迭代對(duì)象中最大或最小值
返回多個(gè)參數(shù)中最大或最小值
round(x)
四舍六入五取偶,round(-0.5)
pow(x , y)
等價(jià)于 x**y
range(stop)
從0開始到stop-1的可迭代對(duì)象;range(start, stop[, step])從start開始到stop-1結(jié)束步長(zhǎng)為step的可迭代對(duì)象
divmod(x, y)
等價(jià)于 tuple (x//y, x%y)
sum(iterable[, start])
對(duì)可迭代對(duì)象的所有數(shù)值元素求和
sum(range(1,100,2))
chr(i)
給一個(gè)一定范圍的整數(shù)返回對(duì)應(yīng)的字符
ord(c)
返回字符對(duì)應(yīng)的整數(shù)
sorted(iterable[, key][, reverse]) 排序
返回一個(gè)新的列表,默認(rèn)升序
reversed()
反轉(zhuǎn)
枚舉 enumerate(seq, start=0)
迭代一個(gè)序列,返回索引數(shù)字和元素構(gòu)成的二元組
*start表示索引開始的數(shù)字,默認(rèn)是0
迭代器和取元素 iter(iterable)、next(iterator[, default])
iter將一個(gè)可迭代對(duì)象封裝成一個(gè)迭代器
next對(duì)一個(gè)迭代器取下一個(gè)元素。如果全部元素都取過了,再次next會(huì)拋StopIteration異常
拉鏈函數(shù)zip(*iterables)
像拉鏈一樣,把多個(gè)可迭代對(duì)象合并在一起,返回一個(gè)迭代器
將每次從不同對(duì)象中取到的元素合并成一個(gè)元組
木桶原理,取最小迭代次數(shù)迭代
可迭代對(duì)象
能夠通過迭代一次次返回不同的元素的對(duì)象。
所謂相同,不是指值是否相同,而是元素在容器中是否是同一個(gè),例如列表中值可以重復(fù)的,[‘a(chǎn)‘,‘a(chǎn)‘],雖然這個(gè)列表有2個(gè)元素,值一樣,但是兩個(gè)‘a(chǎn)‘是不同的元素
可以迭代,但是未必有序,未必可索引
可迭代對(duì)象有:list、tuple、string、bytes、bytearray、range、set、dict、生成器等
可以使用成員操作符in、not in,in本質(zhì)上就是在遍歷對(duì)象
迭代器
特殊的對(duì)象,一定是可迭代對(duì)象,具備可迭代對(duì)象的特征
通過iter方法把一個(gè)可迭代對(duì)象封裝成迭代器
通過next方法,迭代 迭代器對(duì)象
生成器對(duì)象,就是迭代器對(duì)象
原文地址:http://blog.51cto.com/11281400/2095710
總結(jié)
以上是生活随笔為你收集整理的python第三周笔记_Python第三周 学习笔记(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python完全支持面向对象编程_[Py
- 下一篇: python文本菜单程序_python3