-------------------------------------------------------------------------------------------------------
list,array,stack
初始化
[]
[1,"a","cde"]
array [0]*5 ----> generate [0,0,0,0,0]
fake matrix [[0]*5]*6
----> generate [0]5*6 ----->但是又一个问题:[0]*5生成了一个list,是一个引用,这个引用*6,即会产生六个相同的引用,改变其中任意一个,会相应的改变其他5个。因而这个方法并不适合残生matrix
matrix list comprehension: *****是一个创建新list的操作*****
pattern: 生成一个新的值+for循环
e.g., [0]*5 for i in range(6)
增
增一个元素: append(elem)
insert(index, elelm)
增加一整个collection中的元素 x=y+z (y,z are lists) or y.extend(z)
删
pop():删除最后一个元素
pop(index): 删除第i个元素
remove(elem): 删除第一个elem
查
if elem in list:查是否有
list.index(elem):返回elem的index
list.count(elem):返回elem的个数
list[-1], list[3:]
改
list[index] = A: 改某一个特定的index的元素
list = [1,2,3]
list1 = [10 if elem==2 else elem for elem in list]
list comprehension:
轻量级循环,压缩for if else
copy
y = x 拷贝,如果改变y中的元素,也会改变x中的元素
y = x[:] 拷贝,如果改变y中immutable的元素,不会改变x中对应的immutable的元素。但是如果改变y中mutable的元素,也会改变x中mutable的元素
reoder:
sort
针对tuple的情况:
list.sort(key=lambda x:x[1]) lambda是函数入口,reverse默认是False,从小到大
e.g.,
list = [('a',1), ('b',3), ('c',2)]
list.sort(key=lambda x:x[1], reverse=True)
针对self-define class, 传入cmp function
e.g.,
def cmp(x1, x2):
......
list.sort(cmp)
reverse
global的方法
sorted(list)
max(list)
min(list)
len(list)
sum(list)
Iterable and Iterator
Iteratble and Iterator 都有 __iter__ 方法。该方法会在for循环中指向下一个元素
Iterator 有next方法
String, List, Tuple, Dictionary 都是Iterable的
-------------------------------------------------------------------------------------------------------
dequeue
初始化
from collections import deque
x = deque([])
增
入队一个元素
x.append(elem): append the element into the queue
x.appendleft(elem): prepend the element
删
出队一个元素
x.pop(): pop the last element
x.popleft(): pop the first element
查
查top元素
x[0]
x[-1]
改
不存在
list不能同时实现 O(1)的pop() 和 O(1)的append(elem)
因为如果是用 insert(0, elem)和pop(), insert 是O(n)
append(elem), pop(0), pop(0) 是O(n)
-------------------------------------------------------------------------------------------------------
priority queue (heap)
1.heapq
初始化
[]: 如果是空,则可以直接用列表的形式
heapq.heapify([1,2,3]),如果不为空,必须放在heapify里面
增
heapq.heappush(heap, elem)
删
heapq.heappop(heap)
if elem自定义了__cmp__方法,则heapq会调用__cmp__来进行排序
else if elem是一个tuple,会根据tuple的第一个元素来进行排序
默认是从小到大排序,如果想要从大到小排序,对值取负
2.Queue.PriorityQueue
-------------------------------------------------------------------------------------------------------
set
初始化
set(Iterable)
e.g., set([1,2,3]), set("abc") = set(['a', 'c', 'b']), set(["a":1, "b":2, "c":3]) = set(['a', 'c', 'b'])
增 add()
删 remove(): raise Exception if not exists
discard(): won't raise Exception
查 x in set
-------------------------------------------------------------------------------------------------------
dictionary
mutable类型的变量不能作为dictionary的key值
if表达中会导致True,False的变量,如None,空字符串 “”
No comments:
Post a Comment