谈谈Python中pop与remove的用法
remove() 函数用于移除列表中某个值的第一个匹配项。
remove()方法语法: list.remove(obj)
如果obj不在列表中会引发 ValueError 错误,通常先使用count方法查看有多少个obj
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
pop()方法语法: list.pop(obj=list[-1])
接下来发现网上的另一篇文章貌似说的不是很合理
https://www.jb51.net/article/132501.htm
a_list = ['a', 'b', 'c', 'd', 'e']
b_list = ['b', 'c']
for i in a_list:
if i in b_list:
a_list.remove(i)
print(a_list)
# 输出 ['a', 'c', 'd', 'e'] a_list = ['a', 'b', 'c', 'd', 'e']
b_list = ['b', 'c']
for i in a_list:
if i in b_list:
idl = a_list.index(i)
a_list.pop(idl)
print(a_list)
# 输出 ['a', 'c', 'd', 'e']
为什么元素‘c’未被删除呢?那篇文章说x已经不是原来的x,好吧先看看以下的代码吧
x = ['a', 'b', 'c', 'd']
print(id(x))
x.remove('b')
print(x)
print(id(x))
#
# ['a', 'c', 'd']
# y = ['a', 'b', 'c', 'd']
print(id(y))
y.pop(2)
print(y)
print(id(y))
#
# [1, 2, 4]
#
这很明显经过remove与pop删除元素之后,地址并没有改变,所以应该不是重新赋值。
针对使用for循环删除元素来谈一谈个人看法,为了方便表达,直接解释代码,如下
a_list = ['a', 'b', 'c', 'c', 'd', 'e']
# 在元素‘c’后面又增加一个‘c’ b_list = ['b', 'c']
for i in a_list:
if i in b_list:
a_list.remove(i)
print(a_list)
# 依然输出 ['a', 'c', 'd', 'e'] ,这说明
# 当remove删除‘b’元素时第一个‘c’移动到‘b’的位置
# 第二遍循环遍历时for循环是从上一次循环的下个索引位置开始的
# 此时就删除了第二个‘c’,第一个“逃过一劫” a_list = ['a', 'b', 'c', 'c', 'd', 'e']
# 在元素‘c’后面又增加一个‘c’ b_list = ['b', 'c']
for i in a_list:
if i in b_list:
idl = a_list.index(i)
a_list.pop(idl)
print(a_list)
# 同样输出 ['a', 'c', 'd', 'e']
# 原理同remove相同
谈谈Python中pop与remove的用法的更多相关文章
- python中pop()与split()的用法
imglist = ['11.jpg','12.jpg','13.jpg','14.jpg','2.jpg','1.jpg',] print(str(imglist)) a = str(imglist ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- Python中【__all__】的用法
Python中[__all__]的用法 转:http://python-china.org/t/725 用 __all__ 暴露接口 Python 可以在模块级别暴露接口: __all__ = [&q ...
- python中enumerate()函数用法
python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6] 请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...
- Python中try...except...else的用法
Python中try...except...else的用法: try: <语句>except <name>: <语句> #如果在try ...
- Python中logging模块的基本用法
在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...
- (转)Python中的split()函数的用法
Python中的split()函数的用法 原文:https://www.cnblogs.com/hjhsysu/p/5700347.html Python中有split()和os.path.split ...
- Python中zip()与zip(*)的用法
目录 Python中zip()与zip(*)的用法 zip() 知识点来自leetcode最长公共前缀 Python中zip()与zip(*)的用法 可以看成是zip()为压缩,zip(*)是解压 z ...
- python中的随机函数random的用法示例
python中的随机函数random的用法示例 一.random模块简介 Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据 ...
随机推荐
- python3编程基础之一:程序结构
程序从程序入口进入,到程序执行结束,大体是按照顺序结构执行语句.函数或代码块,掌握程序的结构,有利于把握程序的主体框架. 1.顺序结构--最常见的结构 顺序结构的程序设计是最简单的,只要按照解决问题的 ...
- 为Python配置Vim编辑器(GUI/非GUI皆可)
原文地址:https://blog.csdn.net/alanzjl/article/details/49383943 Vim as a python IDE ** 最近一直在写Python,但一直没 ...
- vue.js 中this.$router.push()的使用
在vue项目中,跳转可以用router-link直接跳到某个页面 因为有时候会需要做一些判断等情况,所以要用到 this.$router.push() 因为外链跳转根本就不在router的设计考虑范围 ...
- Android数据绑定DataBinding(一)入门篇
早上看到了一篇推文"还在使用繁琐的findViewById,跟着尝试了一下DataBinding,之前使用ButteKnife就已经干掉了findViewById.因为写过微信小程序,那种在 ...
- [RK3288] 外接USB设备出现丢数
CPU:RK3288 系统:Android 5.1 主板外接 USB 接口的外设,经常会出现丢数的现象,这种问题在很多 USB 接口的外设上都遇到过,例如:USB读卡器.USB扫描枪等 有一个共同点是 ...
- pl/sql test Window 参数为date
好久没写笔记了,感觉颓废了,原因是工作忙,休息时间人也变懒了,好了不说了:今天需要记录一下plsql打开测试窗口测试存储过程时,入参为date格式时报的异常 本以为和sql一样处理就可以,但是报异常, ...
- ML_Review_PCA(Ch4)
Note sth about PCA(Principal Component Analysis) ML6月20日就要考试了,准备日更博客,来记录复习一下这次ML课所学习的一些方法. 博客是在参考老 ...
- Linux 端口被进程多次占用,LINUX最好用查看端口占用并杀死(kill)的方式
一.端口被占用 二.查看进程 三.并杀死占用端口的进程,并重启服务,状体正常 补充: 根据指定端口查看 wd@wd:~/workspace/cat$ sudo netstat -tlnp|grep 6 ...
- ISO/IEC 9899:2011 条款6.4.5——字符串字面量
6.4.5 字符串字面量 语法 1.string-literal: encoding-prefixopt " s-char-sequenceopt " encoding- ...
- osg 添加 fbx插件 osg中编译fbx
使用osg加载fbx模型,需要自己编译fbx插件,编译流程与插件使用案例如下 代码地址:https://github.com/shelltdf/osgFBX CMake Error: The foll ...