Python3数据结构总结(列表list,元组tuple,集合set,字典dict,堆栈stack,队列queue和遍历技巧)

文章目录

  • 6种标准数据类型(列表,元组,集合,字典)的对比和初始化
  • 列表增删改查等常用操作的方法总结
  • 列表当做堆栈stack使用
  • 列表当做队列queue使用
  • 序列(字符串+列表+字典)的遍历技巧
    • 字符串的遍历`for ii,ch in enumerate(string)`
    • 列表的遍历`for index,value in enumerate(list)`
    • 字典的遍历`for key,value in dict.items()`
    • 多个序列的遍历`for element_a,element_b in zip(sequence_a,sequence_b)`

6种标准数据类型(列表,元组,集合,字典)的对比和初始化

Python3 中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

6种数据类型对比

数据类型 标准用法 说明 数据是否可变 是否属于序列
Number(数字) a = 123.4 包含4种基本类型:int、float、bool、complex(复数)
String(字符串) str = ‘liukai’ 字符串可以被索引和切片,但是不能更改
List(列表) list = [‘k’,‘a’,‘i’] 列表可以被索引和切片,可以包含所有数据结构
列表切片的时候,可以指定步长,如letter[1:4:2]
有pop,append等方法
可变数据
Tuple(元组) tuple = (‘liu’,‘kai’) tuple元素不可变,但是可以包含list列表可变对象
空元组初始化:tup0 = ()
单元素元组初始化:tup1 = (1,)
Set(集合) values = {a,b,c} 基本功能是进行成员关系测试和删除重复元素
空集合使用set()创建,因为{ }表示空字典
可变数据
Dictionary(字典) dict = {‘name’:‘liukai’, ‘number’:12345} 字典的元素是键值对,关键字不可变,且不能重复
创建空字典用{}
可变数据

4种数据结构的初始化

>>> a = []			# list
>>> b = ()			# tuple
>>> c = set()		# set
>>> d = {}			# dict

在这里插入图片描述

列表增删改查等常用操作的方法总结

方法 描述
list.append(x) 把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。
list.extend(L) 通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L,L是一个列表。
list.insert(i, x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x) 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i]) 从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
list.clear() 移除列表中的所有项,等于del a[:]。
list.index(x) 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x) 返回 x 在列表中出现的次数。
list.sort() 对列表中的元素进行排序。
list.reverse() 倒排列表中的元素。
list.copy() 返回列表的浅复制,等于a[:]。

列表当做堆栈stack使用

append()方法可以把一个元素添加到堆栈顶。

用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来。

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack
[3, 4, 5]

列表当做队列queue使用

在列表的最后添加或者弹出元素速度快,然而在列表里插入list.insert(0,x)或者从头部list.remove(list[0])弹出速度却不快(因为所有其他的元素都得一个一个地移动)。

方法一(使用insertremove

>>> list = [0,1,2,3]
# 指定位置插入
>>> list.insert(0,-1)
>>> list
[-1, 0, 1, 2, 3]
# 删除指定值
>>> list.remove(list[0])
>>> list
[0, 1, 2, 3]

方法二(import deque

核心是appendleft()popleft()这两个函数。

>>> from collections import deque	
>>> queue = deque([0,1,2,3])
# 在左侧操作
>>> queue.appendleft(-1)
>>> queue
deque([-1, 0, 1, 2, 3])
>>> queue.popleft()
-1
>>> queue
deque([0, 1, 2, 3])
# 在右侧操作
>>> queue.append(4)
>>> queue
deque([0, 1, 2, 3, 4])
>>> queue.pop()
4
>>> queue
deque([0, 1, 2, 3])

序列(字符串+列表+字典)的遍历技巧

在序列中遍历时,索引位置和对应值可以使用 enumerate()函数同时得到,基本用法是

for index,value in enumerate(sequence):
    print(index,value)

字符串的遍历for ii,ch in enumerate(string)

>>> string = 'liukai'
>>> for ii,ch in enumerate(string):
...     print(ii,ch)
...     
0 l
1 i
2 u
3 k
4 a
5 i

列表的遍历for index,value in enumerate(list)

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

# 按照顺序遍历
>>> for v in sorted(['tic', 'tac', 'toe']):
...     print(v)
...     
tac
tic
toe

字典的遍历for key,value in dict.items()

>>> phone_num = {'liukai':188,'xumengsi':183}
>>> for key,value in phone_num.items():
...     print(key,value)
... 
liukai 188
xumengsi 183

多个序列的遍历for element_a,element_b in zip(sequence_a,sequence_b)

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

参考文献

  1. Python3 基本数据类型 | 菜鸟教程
  2. Python3 数据结构 | 菜鸟教程

你可能感兴趣的:(Python学习,数据结构)