文章目录
Python3-python中常见的数据结构及其使用
1. 列表
1.1 列表常见的方法(函数)
示例:
1.2 列表可看作堆栈(stack)
堆栈是一种常见的数据结构,数据先进后出,列表可以看作是一个堆栈。
分析如下:
可以看到append(x)
和pop()
方法,前者是在最右边插入一个元素,后者是在最右边移除一个元素。这和堆栈的添加和删除元素的原理是一致的,堆栈在堆顶添加元素,也在堆顶移除元素。
1.3 列表可看作队列(queue)
队列也是一种常见的数据结构,数据先进先出。然而将列表看作是队列的效率不高,因为从列表最左边取出第一个元素或在列表中插入某个元素的速度并不快。
from collections import deque
deque是一个双向队列,如果经常需要在两端append或pop元素,使用这个数据结构效率较高,若经常需要在队列中插入元素,效率会比较低。
1.3 列表推导
一句话总结:由列表生成列表。
在一个列表中,可以使用for语句或者if语句生成一个新的列表。
list1 = [1,2,3]
list2 = [4,5,6]
new_list1 = [x*2 for x in list1]
new_list2 = [x*y for x in list1 for y in list2]
new_list3 = [x*y for x in list1 if x>1 for y in list2 if y>5]
new_list4 = [x*y for x in list1 for y in list2 if y>5 if x>1]
new_list5 = [list1[i]*list2[i] for i in range(len(list1))]
print(new_list1)
print(new_list2)
print(new_list3)
print(new_list4)
print(new_list5)
1.4 嵌套列表的使用
嵌套列表,即列表内的元素也是列表。最经典的嵌套列表就是就是矩阵。
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
print(matrix)
print(matrix[1])
print(matrix[0][0])
print(matrix[1][1])
可以看到第一次索引,是取列表,而第二次索引是取在第一次索引的基础上取列表中的元素。
矩阵转置:
# 以下三种方法本质是一样的,都是嵌套for循环
# 方法1:
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
m1 = [[raw[0] for raw in matrix]]
m_new = [[raw[i] for raw in matrix] for i in range(4)]
print((m1))
print(m_new)
# 方法2:
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
m_new = []
for i in range(4):
m1 = [raw[i] for raw in matrix]
m_new.append(m1)
print(m_new)
# 方法3:
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
m_new = []
for i in range(4):
m1 = []
for raw in matrix:
m1.append(raw[i])
m_new.append(m1)
print(m_new)
1.5 del语句
按索引删除元素或切片,也可以删除变量。
2. 元组嵌套
3. 集合
集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。空集合必须使用set()创建。
这里仅演示集合推导:
与列表推导类似,集合推导就是用一个集合生成另一个集合。
4. 字典
字典可以看作是一个无序的键值对集合,在同一个字典中,关键字必须是互不相同的。一对大括号创建一个空的字典:{}。
通过构造函数dict() 对元组列表构建字典。
5. 遍历技巧
# 字典遍历
dict = {
1:'a', 2:'b', 3:'c'}
print(dict)
for k, v in dict.items():
print(k, v)
# 列表遍历
for i, j in enumerate(['a', 'b', 'c']):
print(i, j)
# 格式化输出
# {0} {1}表示format(q,a)中的第一个参数和第二个参数。
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers): # q从questions中获取,a从answers中获取。
print('What is your {0}? It is {1}.'.format(q, a))