【内置容器篇】

本文详细介绍了Python中的内置容器,包括线性表(如列表、元组和堆栈)、哈希表(如集合和字典),以及它们在数据结构中的操作和应用场景,涵盖了列表的定义、操作、排序,以及set和dict的特性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

容器篇

一.内置容器分别有:

1.线性表;

2.哈希表;

3.树;

4.图;

二.具体情况如下

1.线性表(线性数据结构):

线性结构是一种有序数据项的集合,其中每个数据项都有唯一的前驱和后继。除了第一个没有前驱,最后一个没有后继,新的数据项加入到数据集中时,只会加入到原有某个数据项之前或之后,具有这种性质的数据集,就称为线性结构。(简单来说就是有序列的容器)

(1)有序的序列容器

●数组(array):

一段连续的内存空间(地址):

弱数据类型编程语言没有数组,即便是它叫数组,也不是数组;

●链表(list):是指采用链式结构来存储数据元素的线性表;

       可能是不连续的内存组成。

 ●栈(stack):是一个有次序的数据集,每个数据项仅从“栈顶”一端加入到数据集中、 从数据集中移除,栈具有后进先出LIFO 和先进先出FILO。

●队列(queue):队列(Queue)是一个有次序的数据集合,数据项仅添加到“尾rear” 端,而且仅从“首front”端移除;Queue具有FIFO的操作次序。

1.1  list(链表、列表):

列表,python官方提供的内置的线性表

底层实现:基于双向链表结构实现

(1)定义列表:

age = [] # 中括号在python代表的就是列表

age = [18, 16, 20, 30]

names = list()

names = list("张三", "李四", "王五")

(2)操作列表中的元素(element):

通过下标可以访问元素

列表[index]

注意:   index:从0开始;

最大值: 列表的总长度 - 1

(3)获取列表的长度:

len(Iterable) # 返回这个可迭代对象的长度

(4)列表的遍历:

●for循环

Code:

for 临时变量 in Iterable:

# 每一次得到的元素会放在临时变量中

●while循环;

(5)列表的常见方法:

['append', 'clear', 'copy', 'count', 'extend', 'index',

'insert', 'pop', 'remove', 'reverse', 'sort']

这些方法都是用来操作列表的CRUD(增删改查)

|-- append(ele) # 在尾部追加新的元素

|-- insert(index, ele) # 在特定的位置添加元素

|-- extend(list) # 合并列表

|-- clear() # 清空列表

|-- remove(ele) # 删除指定元素

|-- pop() # 删除最后一个元素

|-- index(ele) # 返回查找到的一个元素位置

|-- count(ele) # 返回元素的数量

|-- reverse() # 翻转列表顺序

|-- sort() # 排序

|-- copy() # 拷贝、复制,对象拷贝,对象浅拷贝

  1. Set:哈希表(hash table)

所有的元素之间没有任何关系。元素的存储位置,是利用元素的关键字通过某个函数直接计算出来的。这个一一对应的关系函数称为散列函数或Hash函数。

(1)哈希算法的实现:能够将任何事物映射为一个特定的值

特点:     ●元素不能重复

                ●无序的

(2)定义set:

s = set(Iterable)

ss = {1,2,3,4,} #“{}”中必须有值,如果没有值,则默认是dict,不是set(原因是 set与dict都是用花括号”{}”存储的)

注意:set的元素无法通过下标访问

(3)set的常见方法:

['add', 'clear', 'copy', 'difference', 'difference_update',

'discard', 'intersection', 'intersection_update', 'isdisjoint',

'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference',

'symmetric_difference_update', 'union', 'update']

|-- add(ele) # 添加元素

|-- clear() # 清空列表

|-- copy() # 浅拷贝

|-- difference(set) # 差集

|-- intersection(set) # 交集

|-- union(set) # 并集

|-- update(set) # 合并两个集合

|-- discard(ele) # 移除元素,如果该元素不存在,则什么都不做

|-- remove(ele) # 移除元素,如果该元素不存在,则抛出异常

|-- pop() # 删除最后一个元素

|--update () #更新数据

|--union #返回两个集合的并集

注意:set没有办法使用while 遍历数据,只能使用for循环

3.tuple(元组):

是一种不可变数据类型,基本数据类型也是不可变数据类型,不可变数据类型中如果存在了可变数据类型,这个子对象是可以发生变化的,所以表示的就是的固定的值,固定的一组值,可以通过下标来访问。

(注意:元组的元素一旦定义,就无法修改!!!)

(1)常用方法:

|-- count(ele) # 返回元素的数量

|-- index (ele) # 返回查找到的一个元素位置

4.字典(dict):

字典和集合一样,底层实现就是一个hash table

(1)最终的表示方式:

键值对:一个唯一键对应一个值,一一对应的关系

●python中字典:

d = {}

d = {"id": 2, "name": "刘慧", "age": 17}

dd = dict({"id": 2, "name": "刘慧", "age": 17})

●获取字典中的值:

d[key] # 就可以获取字典中,key对应的值,如果不存在,则抛出异常

字典对象.get(key,default) # 就可以获取字典中,key对应的值,如果不存在,则返回None

(2)字典对象的常见方法:

 ['clear', 'copy', 'fromkeys', 'get', 'items', 'keys',

 'pop', 'popitem', 'setdefault', 'update', 'values']

|-- clear() # 清空列表

|-- copy() # 浅拷贝

|-- get(key, [defaul]) # 在key参数不是字典键时返回

|-- setdefault() # 如果键在字典中,返回这个键所对应的值。

如果键不在字典中,向字典 中插入这个键,并且以default为这 个键的值,并返回 default。default的默认值为None

|-- keys() # 获取所有的键

|-- values() #获取当前字典中所有键值对中的值

|-- items() # 返回列表

|-- pop(key) # 通过key,删除键值对

|-- popitem() # 随机返回并删除字典末尾一组键值对

|-- update() # 合并字典  等价于 {**对象, **对象}

|-- fromkeys(iterable) # 生成一个新的字典对象

(3)如何遍历字典:

●for i in 对象.keys():

print(i, 对象[i])

●for i in 对象:

print(i, 对象[i])

●for item in 对象.items():

print(item[0], item[1])

●for (key, value) in 对象.items():

print(key, value)

●for key, value in 对象.items():

print(key, value)

  • 排序:

为了方便大量数据的查找,一般会先排序这些数据,这个优秀的查找算法都是针对有序数据的

1.冒泡排序:

冒泡排序是同通过把列表内的元素两两之间进行比较,每一次把最大的值或者最小的值移动到列表的相对的最左边或者最右边的位置,

代码实现如下:

num = [8,5,2,3,7,4,6,1,9]

for i in range(0,len(num)-1):

  for j in range(0,len(num)-1-i):

  if num[j] >= num[j+1]:

   num[j],num[j+1] = num[j+1],num[j]

print(num)   

  1. 选择排序:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

代码实现如下:

num = [8,5,2,3,7,4,6,1,9]

for i in range(0,len(num)):

  for j in range(i+1,len(num)):

   if num[i] >= num[j]:

    num[i],num[j] = num[j],num[i]

print(num)

  1. 插入排序:

插入排序是一种简单直观的排序方法,其基本思想在于每次将一个待排序的记录,按照其关键字大小插入到前面已经排好序的子序列中,直到全部记录插入完成。

代码实现如下:

num = [8,5,2,3,7,4,6,1,9]

for i in range(0,len(num)):

for j in range(i,0,-1):

   if num[j] <= num[j-1]:

    num[j],num[j-1] = num[j-1],num[j]

print(num)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值