Data management: non-slicing style
s.append(x)s.extend(t) or s += ts.insert(i, x)s.pop([i])s.remove(x)s.clear()len(s)max(s)min(s)x in ss.index(x[, i[, j]])s.count(x)s.reverse()Data management: slicing Style
s[i:i] = t
s[len(s):len(s)] = [x]s[len(s):len(s)] = ts[i:i] = [x]del s[i]del s[i:j]del s[i:j:k]s[i]s[i:j]s[i:j:k] 越界自动停止s[i] = xs[i:j] = t 大小不需要一致s[i,j,k] = t 大小必须一致数学运算
a + b数学运算
a.isdisjoint(b)a <= ba < ba >= ba | b ora & b anda - b differencea ^ b symetric differenceData management
a.add(x)a.remove(x) will raise errora.discard(x) will not raise error if key not exista.pop()a.clear()len(a)max(a)min(a)x in aa |= ba &= ba -= ba ^= bData management
d[key] = valuedel d[key]d.pop(key) return valued.popitem() for distructiona.clear()d.items()d.keys()d.values()iter(d) or iter(d.keys())len(d)max(d) max keymin(d) min keykey in dd[key] = valued1.update(d2)reversed(d) 等同于 reversed(d.keys())关于方向
set()没有方向Operations with defaults
d.get(key[, default])d.setdefault(key[, default])
d.setdefault(key, []).append(item)d.setdefault(key, 0).add(1)add不是inplacepop(key[, default])from collections import deque
q.append(x)q.extend(t)q.appendleft(x)q.extendleft(t)q.insert(i, x)q.pop()q.popleft()q.remove(x) O(n) time complexityq[i]
q[0] and q[-1] peekq.count(x)q.index(x[, start[, stop]])len(q)max(q)min(q)q.maxlen not a functionx in qq.rotate(n=1) O(n) time complexityq.reverse()from heapq import heapify, heappush, heappop
h = ***
heapify(h)
heappush(h, x)
x = heappop(h)
print(h[0]) # peek
max heap 的 负号位置
h = [-x for x in array]
heapify(h)
heappush(h, -x)
x = -heappop(h)
print(-h[0]) # peek
for item in container:
if search_something(item):
# Found it!
process(item)
break
else:
# Didn't find anything..
not_found_in_container()
fun1 = lambda x: -x * 10
print(fun1(1))
-10
same as
def fun2(x): return -x * 10
print(fun2(1))
-10
in sorting
a = [1, 4, -1, -3]
print(sorted(a))
print(sorted(a, key=fun1))
print(a)
print(a.sort(key=fun2))
print(a)
[-3, -1, 1, 4]
[4, 1, -1, -3]
[1, 4, -1, -3]
None
[4, 1, -1, -3]
a.sort() won’t return anything
ab = {'a':1, 'b':2, 'c': 4, 'd':3}
data = 'babdc'
data.sort()
1 ab = {'a':1, 'b':2, 'c': 4, 'd':3}
2 data = 'babdc'
----> 3 data.sort()
AttributeError: 'str' object has no attribute 'sort'
print(sorted(data))
print(sorted(data, key=lambda x: ab[x]))
['a', 'b', 'b', 'c', 'd']
['a', 'b', 'b', 'd', 'c']
List 是可以按元素直接比较的,左边的权重高。 所以List of List 是可以直接sort的。 也可以取最值。 也可以heap。
Example
heappush() and heappop does not have key attr. Need to define a __lt__() function for the same propose
from heapq import heappush, heappop
# self defined value
ab = {'a':1, 'b':2, 'c': 4, 'd':3}
# data
data = 'babdc'
# char class to define the comparison function
class char:
def __init__(self, val):
self.val = val
def __lt__(self, other):
if ab[self.val] < ab[other.val]:
return True
else:
return False
# heap sort
h = []
for c in data:
heappush(h, char(c))
ans = []
while h:
ans.append(heappop(h).val)
print(ans)
['a', 'b', 'b', 'd', 'c']
zip 的操作是把同index放在一个tuple里,所以和转置息息相关。 注意zip的输出不是list,而是一个zip,可用作iter
使用zip函数转置list of tuples
# initializing list of tuples
test_list = [('Akshat', 1), ('Bro', 2), ('is', 3), ('Placed', 4)]
# Printing original list
print ("Original list is : " + str(test_list))
# perform Unzipping
res = list(zip(*test_list))
# Printing modified list
print ("Modified list is : " + str(res))
Original list is : [('Akshat', 1), ('Bro', 2), ('is', 3), ('Placed', 4)]
Modified list is : [('Akshat', 'Bro', 'is', 'Placed'), (1, 2, 3, 4)]
// do floor operation to get the int number
>>> 11 // 4
2
>>> -11 // 4
-3