Python-pop()和popleft()方法

1. pop()和popleft()方法

pop()popleft()Python 标准库 collections 模块中 deque(双端队列)对象的方法,用于从队列中删除元素。

pop() 方法用于从队列的右侧(末尾)删除元素,并返回被删除的元素

其语法如下:

python">deque.pop()

如果队列为空,pop() 方法会引发 IndexError 异常。

popleft() 方法用于从队列的左侧(开头)删除元素,并返回被删除的元素。

其语法如下:

python">deque.popleft()

如果队列为空,popleft() 方法会引发 IndexError 异常。

需要注意的是,deque 是一种双端队列(double-ended queue),即可以从队列的两端进行添加和删除操作。相比于普通的列表(list),deque 在执行左侧删除操作时具有较高的性能,因为它是基于双向链表实现的,而列表则是基于动态数组实现的。因此,在需要频繁从队列的左侧执行删除操作时,使用 deque 可能会更加高效。

2.pop()和popleft()示例

当使用 Python 标准库 collections 模块中的 deque 类时,可以通过 pop()popleft() 方法来删除队列中的元素。

以下是示例代码:

python">from collections import deque

# 创建一个双端队列
my_deque = deque([1, 2, 3, 4, 5])

# 使用 pop() 方法从队列右侧删除元素,并返回被删除的元素
removed_element = my_deque.pop()
print("Removed element from right side of deque:", removed_element)
print("Updated deque after pop():", my_deque)

# 使用 popleft() 方法从队列左侧删除元素,并返回被删除的元素
removed_element = my_deque.popleft()
print("Removed element from left side of deque:", removed_element)
print("Updated deque after popleft():", my_deque)

运行上述代码,输出如下:

python">Removed element from right side of deque: 5
Updated deque after pop(): deque([1, 2, 3, 4])
Removed element from left side of deque: 1
Updated deque after popleft(): deque([2, 3, 4])

可以看到,pop() 方法从队列的右侧删除了元素 5,并返回了被删除的元素;popleft() 方法从队列的左侧删除了元素 1,并返回了被删除的元素。更新后的队列分别为 [1, 2, 3, 4][2, 3, 4]

3.pop()用于list、dict和set

pop() 方法在 Python 中可以用于列表(list)、字典(dict)和集合(set)等数据类型,但在不同的数据类型中有不同的用法和效果。

3.1 list.pop()

列表(list):pop() 方法用于从列表的指定位置删除元素,并返回被删除的元素。可以通过传递可选的索引参数来指定要删除的位置,默认为最后一个元素。

示例:

python">my_list = [1, 2, 3, 4, 5]
removed_element = my_list.pop() # 删除最后一个元素并返回
print("Removed element from list:", removed_element)
print("Updated list after pop():", my_list)

运行结果

python">Removed element from list: 5
Updated list after pop(): [1, 2, 3, 4]

3.2 dict.pop()

字典(dict):pop() 方法用于从字典中删除指定键(key)的键值对,并返回被删除的键值对的值。

示例:

python">my_dict = {'a': 1, 'b': 2, 'c': 3}
removed_value = my_dict.pop('b') # 删除键 'b' 并返回对应的值
print("Removed value from dict:", removed_value)
print("Updated dict after pop():", my_dict)

运行结果

python">Removed value from dict: 2
Updated dict after pop(): {'a': 1, 'c': 3}

3.3 set.pop()

集合(set):pop() 方法用于从集合中删除并返回一个随机元素。由于集合是无序的,因此删除的元素是不确定的。

示例:

python">my_set = {1, 2, 3, 4, 5}
removed_element = my_set.pop() # 删除并返回一个随机元素
print("Removed element from set:", removed_element)
print("Updated set after pop():", my_set)

运行结果

python">Removed element from set: 1
Updated set after pop(): {2, 3, 4, 5}

3.4 注意事项

字典和集合中的 pop() 方法删除元素是无序的,并且在删除时返回被删除的值。

列表中的 pop() 方法删除元素是有序的,并且在删除时返回被删除的元素。

在使用时,需要根据具体的数据类型和需求选择合适的 pop() 方法。

字典和集合中的 pop() 方法删除元素是无序的,因为字典和集合是无序的数据类型。

字典(dict)是一种键-值对(key-value)的映射关系的数据类型,其中的键是唯一的,但字典中的键值对是无序的。因此,使用 pop() 方法删除字典中的键值对时,删除的顺序是不确定的。

集合(set)是一种无序且不重复的元素的集合的数据类型。因此,使用 pop() 方法从集合中删除元素时,删除的元素是不确定的,因为集合中的元素是无序的。

需要注意的是,在 Python 3.7+ 版本之后,字典和集合的 pop() 方法开始有了一定的顺序性,即按照元素插入的顺序删除。但在较早的 Python 版本中,字典和集合的 pop() 方法是完全无序的。因此,在编写代码时,不应该依赖于字典和集合的 pop() 方法的顺序性,以免出现不稳定的行为。如果需要按特定顺序删除元素,应该先获取要删除的元素的键或索引,然后再进行删除操作。


http://www.niftyadmin.cn/n/233622.html

相关文章

达梦数据库无启动执行配置,如何启动

一、简介 一般达梦数据库的管理和操作指导手册或者博客都会说创建一个dmdba用户,然后在当前创建的dmdba用户中进行操作安装~部署~启停操作,不用一些操作需要sudo到root用户执行才行。 当前在一台已经安装了DM SQL的环境下,需要启动D…

某vm样本的分析

背景 驱动那块(MiDeadPteTrackerSListHead) 从遥远的东方收到的一个样本,好嘛!打开之后一直不停的在创建和结束进程,又是vmp。 还是老方法,dmp下来之后看看,好嘛,main函数被vm了&am…

android核心架构Framework组件介绍

作为一个android开发者,核心架构是必须要了解的。只有了解每个核心层的作用,才能更深入的理解和学习。本篇主要讲解Java Framework层核心代码流程。 文章目录一,Android系统架构1.System Apps2.Java Framework3.系统运行库层4.硬件抽象层&…

MySQL客观题

MySQL客观题 在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特性的是( A ) A 模式 B 内模式 C 存储模式 D 外模式 数据库系统的特点是( A )、数据独立、减少数据冗余、避免数据不一致和加强了数据保…

2023-04-17 mysql列存储引擎-聚合处理-第三阶段-概要设计

摘要: 对于聚合的处理, mysql列存储引擎性能十分低下,并且会引发内存OOM. 在第二阶段的聚合处理为了使用旧有的数据流方式, 做了一些错误的多线程并行分割的设计。 现在开启第三阶段的聚合, 以正确的数据流来实现聚合的物化模型。 需求分析: 功能需求: 加速聚合处理, 性能提…

JavaScript基础入门全解析(下)

数据类型(重点) ●是指我们存储在内存中的数据的分类,为了方便数据的管理,将数据分成了不同的类型 ●我们通常分为两大类 基本数据类型 和 复杂数据类型(引用数据类型) 基本数据类型 ●在js中基本数据类…

Spring Security实战(一)——基于内存和数据库模型的认证与授权

目录 简介 一、初识Spring Security(入门案例) (1)新建project (2)选择依赖 (3)编写一个 HelloController (4)启动项目,访问localhost:8080…