列表
- list常用方法:
list.append(x): 把一个元素(x)添加到链表 list 的结尾;
list.extend(L): 将一个给定列表中的所有元素都添加到另一个列表中;
list.insert(i, x): 在指定位置插入一个元素;
list.remove(x): 删除链表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i]) : 从链表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop() 返回最后一个元素。元素随即从链表中被删除。
list.index(x): 返回链表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x): 返回 x 在链表中出现的次数。
list.sort(cmp=None, key=None, reverse=False): 对链表中的元素就地进行排序(参数可以用来自定义排序方法,参考 sorted() 的更详细的解释)。
list.reverse(): 就地倒排链表中的元素。 - 把链表当作堆栈(先进后出)来用:
用 append() 方法可以把一个元素添加到堆栈顶。
用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。 - 把链表当作队列(先进先出)来使用:
队列: 相对堆栈来说,从列表末尾添加和弹出很快;在头部插入和弹出很慢(为了一个元素,要移动整个列表中的所有元素)。
队列实现: 要实现队列,使用 collections.deque,它为在首尾两端快速插入和删除而设计。
点击可以直接访问相关文档: collections.deque
链接: link.
函数式编程工具
对于链表来讲,有三个内置函数非常有用: filter(),map() 以及 reduce()。
- filter(function, sequence): 返回一个序列,包括了给定序列中所有调用 function(item) 后返回值为 true 的元素(如果可能的话,会返回相同的类型)。如果该序列 (sequence)是一个 str, unicode 或者 tuple,返回值必定是同一类型,否则,它总是 list。
例如,以下程序可以计算一个被 3 或者 5 整除的序列:
def f(x):
return x % 3 == 0 or x % 5 == 0
filter(f, range(2, 25))
输出结果:[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
- map(function, sequence) : 为每一个元素依次调用 function(item) 并将返回值组成一个链表返回。
例如:以下程序可以计算立方:
def cube(x):
return x*x*x
map(cube, range(1, 11))
输出结果:[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
- reduce(function, sequence) : 返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数 function,再以返回值和第三个参数调用,依次执行下去。
例如,以下程序计算 1 到 10 的整数之和:
def add(x,y):
return x+y
reduce(add, range(1, 11))
输出结果:55
列表推导式
eg1: squares = [x**2 for x in range(10)] # 更简洁、明了
类似于:squares = map(lambda x : x**2, range(10))
eg2: [(x, y) for x in range(1,4) for y in range(2,5) if x != y]
eg3: 矩阵行列互换:(嵌套的列表推导式)
matrix = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
[[row[i] for row in matrix] for i in range(4)] 类似于 => list(zip(*matrix))
del语句
del: 按照索引删除,无返回值。
pop: 删除,返回被删除的值。
eg: del a[0]
del a[2:5]
del也可以删除整个变量: del a
元组和序列
元组,不可变。 在应用上,大致与 list 相似
创造0个元素的元组: empty = ()
创造1个元素的元组: single = ‘hello’, “,”不能少,否则会被当成是个字符串
集合
特点: 无序,不重复
集合对象包含的数学运算: 联合(union)、交(intersection)、差(differrence)、对称差集(sysmmetric differrence)
a = set('abracadabra') # set(['a', 'r', 'b', 'c', 'd'])
b = set('alacazam') # set(['a', 'l', 'z', 'c', 'm'])
a - b # 元素属于a,但不属于b => set(['r', 'd', 'b'])
a | b # 元素属于a或b(并集) => set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
a & b # 元素属于a,且属于b(交集) => set(['a', 'c'])
a ^ b # 元素属于a或b,但是不属于其交集(异或) => set(['r', 'd', 'b', 'm', 'z', 'l'])
字典
dict: 以键值对的形式存在