Python3 学习手册(三) 数据结构

常用的数组方法

list.append(x)向数组追加元素
image_1amqbjfdksa8jlrr97avg1lv4m.png-4.1kB
list.extend(L)向数组list追加数组
image_1amqcfejh1l1irq0mj61csi1a8113.png-5.1kB
list.insert(i, x)向数组指定位置插入元素
image_1amqchu7t5ef1lde1m2l1t5h1vtv1g.png-3.5kB

list.remove(x)移除第一个相同元素
image_1amqcl90ithd5c01ae51a7s14os1t.png-7kB
list.index(x)获取元素的索引
image_1amqcp35o142h1ab11jbn8gfm7c2a.png-3.2kB
list.count(x)元素x出现的次数
image_1amqcra0r1oeu1mcm1oqu1s4nuea2n.png-3.1kB
list.reverse()将数组倒序
list.copy()返回数组的副本
sort(key=None, reverse=False)将数组排序,可指明是否反向排序
image_1amqd7mb7c4130ggp3lutncf34.png-7.1kB
list.pop([i])移除并返回该位置元素,如果不传位置,则表示最后一位。
list.clear()清空数组

把数组当作栈使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> stack = [3, 4, 5]
>>> stack.append(6) # 入栈
>>> stack.append(7) # 入栈
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop() # 出栈
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop() # 出栈
6
>>> stack.pop() # 出栈
5
>>> stack
[3, 4]

使用队列(先进先出)

其中from collections import deque表示从collections包中导入deque函数
image_1amqdpmtumab19rlhchkadd9j3h.png-11.1kB

简单的创建数组

前面介绍的创建的数组方法如下。

1
2
3
4
5
6
>>> squares = []
>>> for x in range(10):
... squares.append(x**2) # x**2表示x的2次幂
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

如何简便的创建?

1
2
3
>>> squares = [x**2 for x in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

tuple (元组)

元组和数组非常相似,不过tuple一旦初始化后,就不能再更改,没有append,insert方法。其他方法等同于数组。元组用(x,x,..)表示。
image_1amqf10o5r8jrovuqv16hh1mkv3u.png-9kB
怎么创建元组?有两种方式,见下图:
image_1amqff5fq1vhe13p7nihh951cpd4o.png-7.6kB
怎么建立多维元组?
image_1amqfinua1uapqppu151gfgh55.png-6.1kB
需要注意的是,当元组中占有一个元素时,务必记得在第一个元素后追加逗号.

1
2
>>> t='maplejaw',
>>> t=('maplejaw',)

在数组中创建元组:

1
2
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

简便算法不仅可以使用for语句,还可以使用if语句。
等同于

1
2
3
4
5
6
7
8
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

del语法

在数组中使用del,可以移除元素。不同于pop(),del 可以移除一组元素。

1
2
3
4
5
6
7
8
9
10
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

del还可以删除变量
image_1amqfabbcf7q1dm7puf1a1vomm4b.png-6.7kB

dict 字典

所谓字典即Java中的Map,通常以键值对(key-value)保存。以{X:Y,X:Y,...}形式表示。

1
2
d = {'name': 'maplejaw', 'age': 20, 'city': 'shanghai'}
print(d['name']) # maplejaw

使用简化方式初始化。

1
2
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

还可以使用dict函数来初始化字典。
传入元素为元组的数组:

1
2
>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

还可以如下形式创建:

1
2
>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

使用d.keys()可以获取key集合。
使用d.items()遍历键值对。

1
2
3
d=dict(sape=4139, guido=4127, jack=4098)
for k,v in d.items():
print(k,v)

image_1amqrmg0tb7a11nbk01h6pqsh9.png-2.1kB

Sets 集合

Sets可以理解为字典中所有key的集合,所以,不会有重复值。以{X,Y,...}形式表示。

1
2
3
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)
{'orange', 'banana', 'pear', 'apple'} # 不会有重复

我们可以判断集合中是不是有该key.

1
2
3
4
>>> 'orange' in basket      
True
>>> 'crabgrass' in basket
False

可以使用set函数来初始化集合。set中传入一个数组即可。

1
2
3
>>> a=set([1,3,6,9])
>>> a
{1,3,6,9}

使用add来添加值,remove来移除值

1
2
3
4
5
>>> a=set([1,3,6,9])
>>> a.add(10)
{1,3,6,9,10}
>>> a.remove(1)
{3,6,9,10}

两个集合之间可以求交集、并集等运算。
求交集:

1
2
3
4
5
6
>>> a={1,2,4,3,8}
>>> b={2,4,6,8,10}
>>> a&b # 交集
{2,4,8}
>>> a|b # 并集
{1,2,3,4,6,8,10}