python初級資料結構(list,tuple,dict)(補充筆記,初級)
阿新 • • 發佈:2018-11-07
List:
遞推式構造列表(List Comprehension),例:
list = [x*2 for x in lm]
切片list[start: stop: step]
sort 和 sorted: sort會改變list(in-place),而sorted返回排序好的列表(return values),原有的不改變. 引數有sequen和key,key值代表按(...)進行排序。
list.sort() sorted(list1) sorted(dict, key=lambda x:dict[x])#按字典中的value進行排序 sorted(dict) #預設對字典的key進行排序
Warning:return values vs. in-place change
map 對映(多對多)
map(func, seq) #返回的是迭代器,可用for進行訪問
list(map(func, seq)) #轉換為list物件
reduce 化簡(多對少)
如下先x1與x2進行func操作,再與x3func操作,再與x4func操作
reduce(func, [x1,x2,x3,x4])
filter 過濾(多對少)
對list的每個元素進行func操作,如果值為True,則保留。
filter(func, list)
------------------------------------------------------------------------------------------------
.pop(_)操作既return values,又in-place。
join:
delimeter = '*'
s = delimeter.join(t) #返回以delimeter連線t中元素的字串
------------------------------------------------------------------------------------------------
賦值、複製、copy
直接賦值,引用複製,在記憶體中實際指向同一個物件。
>>> a = [1,2,3] >>> b = a >>> b is a True >>> b[0] = 100 >>> a [100, 2, 3]
a切片賦值給b,b改變,a不會發生改變
>>> a = [1,2,3,4]
>>> b = a[:]
>>> b[0]= 100
>>> a
[1, 2, 3, 4]
>>> b
[100, 2, 3, 4]
deep copy(完全複製,不會互相影響)
>>> import copy
>>> a = [1,2,3,4]
>>> b = copy.deepcopy(a)
>>> b
[1, 2, 3, 4]
>>> b[0] = 100
>>> a
[1, 2, 3, 4]
>>> b
[100, 2, 3, 4]
>>> a[1] = 200
>>> b
[100, 2, 3, 4]
shallow copy:
- 如果是一個簡單資料(不可變物件),會複製,不會互相影響
- 但對複雜物件(可變物件),會有相互影響
>>> import copy
>>> a = [1,2,[1,2,3]]
>>> b = copy.copy(a)
>>> b
[1, 2, [1, 2, 3]]
>>> b[0] = 100
>>> a
[1, 2, [1, 2, 3]]
>>> a[1] = 200
>>> b
[100, 2, [1, 2, 3]]
>>> b[2] = 3
>>> b
[100, 2, 3]
>>> a
[1, 200, [1, 2, 3]]
Dict
dict is mapping 用空間換時間,適合作快取
get
>>> a.get('age', 10)
18
>>> a = {'name': 'nn'}
>>> a.get('age', 10)
10
>>> a
{'name': 'nn'}
>>> b = {'name': 'nn', 'age': 18}
>>> b.get('age', 18)
18
>>> b
{'name': 'nn', 'age': 18}
快取的概念
例:
known = {0:0, 1:1}
def fib(n):
if n in known:
return known[n]
res = fib(n-1) + fib(n-2)
known[n] = res
return res
2018/5/4:上課筆記