返回顶部
首页 > 资讯 > 后端开发 > Python >python for循环remove同一
  • 927
分享到

python for循环remove同一

pythonremove 2023-01-31 07:01:50 927人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

下午在用python将linux的conf配置文件转化成字典dict时遇到了一个奇怪的问题,原先conf配置文件中没有注释行(以#开头的行),后来为了避免这种情况,添加了一个对以#开头的行删除的操作。 实践结果颠覆了已有的认知,直接上代码示

下午在用pythonlinux的conf配置文件转化成字典dict时遇到了一个奇怪的问题,原先conf配置文件中没有注释行(以#开头的行),后来为了避免这种情况,添加了一个对以#开头的行删除的操作。 实践结果颠覆了已有的认知,直接上代码示例。    
代码片段1

#!/usr/bin/Python    
# encoding: utf-8     
# -*- coding: utf8 -*-     
import re     
list_to_test = ['# ', '# conf', 'NAME="ubuntu"', 'VERSioN="14.04.3 LTS, Trusty Tahr"']     
for member in list_to_test:     
    if re.search('^#+.*', member) is not None:     
        list_to_test.remove(member)     
print list_to_test

结果1:['# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']    
   
代码片段2

#!/usr/bin/python    
# encoding: utf-8     
# -*- coding: utf8 -*-     
list_to_test = ['# ', '# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']     
list_to_test.remove('# ')     
list_to_test.remove('# conf')     
print list_to_test

# 结果2:['NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']

本以为上述两个代码的结果应该是一样的,结果不一样。

分析:

原因是不能在for循环中用remove同一个列表(遍历中删除)。当remove这个list中的元素时,list的长度发生了变化,for循环就会受到影响(这个python版本(2.7.x没有明显的报错,可能作者并不认为这是一个issue或bug,但给点提示也是好的啊)。

解决办法:

用一个新的列表(list)去代替循环中的list或者代替remove操作的list。在创建新的列表是可以用cpoy模块中的deepcopy方法也可以用new_list = old_list[:]的方法,如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
import re
from copy import deepcopy

old_list = ['# ', '# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']
new_list = deepcopy(old_list)
for member in new_list:
    if re.search('^#+.*', member) is not None:
        old_list.remove(member)
print old_list

有趣(令人困惑)的是切片也是浅复制,但利用切片也可以实现上述功能,代码如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
import re
old_list = ['# ', '# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']
new_list = old_list[:]
for member in new_list:
    if re.search('^#+.*', member) is not None:
        old_list.remove(member)
print old_list

上述导致错误发生的例子(在for循环中用remove同一个列表)可以认知为这个操作是修改对象势必影响此对象,要想修改一个对象却不影响此对象引用,则需要对象复制。如果你想修改一个对象,而且想让原始的对象不受影响,那你就需要对象复制。

附加知识点:

关于浅复制(浅拷贝)

对象的浅复制(shallow copy):它虽然复制了对象,但对于对象中的元素,依然使用引用.

(1)、使用切片[:]操作进行拷贝 (注释:切片只复制了对象的顶层,对对象的下一层还是引用,举个例子:[1,2,3,[4,5,6]])

(2)、使用工厂函数(如list/dir/set)等进行拷贝

(3)、copy.copy()

(4)、=(赋值)操作(注释:原文没有,此处是新添加的,根据“对象的赋值实际上是对象的引用”添加)

如果希望复制一个容器对象,以及它里面的所有元素(包含元素的子元素),使用copy.deepcopy这个方法会消耗一些时间和空间。不过,如果你需要完全复制,这是唯一的方法。

注意:

1、对于非容器类型(如数字、字符串、和其他‘原子’类型的对象)没有被拷贝一说。

2、如果元组变量只包含原子类型对象,则不能深copy。

关于深复制和浅复制可以参考:

《深入Python(4):深拷贝和浅拷贝》Http://www.cnblogs.com/BeginMan/p/3197649.html

tag: python删除list成员,python删除列表元素,python遍历删除

--end--

--结束END--

本文标题: python for循环remove同一

本文链接: https://lsjlt.com/news/190978.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python for循环remove同一
    下午在用python将Linux的conf配置文件转化成字典dict时遇到了一个奇怪的问题,原先conf配置文件中没有注释行(以#开头的行),后来为了避免这种情况,添加了一个对以#开头的行删除的操作。 实践结果颠覆了已有的认知,直接上代码示...
    99+
    2023-01-31
    python remove
  • Python中for循环和while循环有什么不同
    这篇文章主要讲解了“Python中for循环和while循环有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中for循环和while循环有什么不同”吧!Python中用w...
    99+
    2023-06-02
  • python for循环
    Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。for循环的语法格式如下:for iterating_var in sequence:    statem...
    99+
    2023-01-30
    python
  • python-for循环与while循环
    格式: while 条件 为 True: 代码块 while True: rayn_age = 18 age = input('请输入你的年龄:') age = int(age) if age == ra...
    99+
    2023-01-31
    python
  • Python循环语句(while循环、for循环)
    Python循环语句 一、while循环二、for语句三、range()函数四、break 和 continue 语句五、pass语句 Python循环语句主要有while循环和for循环...
    99+
    2023-09-04
    python 开发语言 爬虫
  • Python 循环 while,for
    一循环语句(有两种):while 语句for   语句while 语句:问题:输入一个整数n,让程序输出n行的:hello 1hello 2.......hell nwhile 语句:作用:根据一定条件,重复的执行一条语句或多条语句语法:w...
    99+
    2023-01-31
    Python
  • python中For循环
    打印出1到100的数,不包含100for i in range(1,100):if i==23:print "great,you got your luncky number:",iprint 'The unmber is:',i=====...
    99+
    2023-01-31
    python
  • Python的for循环,continu
    #!/usr/bin/env python     #coding:utf-8                                      #for循环和else语法 for i in range(0,10,2):      ...
    99+
    2023-01-31
    Python continu
  • Python双层for循环
    matrix0 = [[1, 2], [3, 3], [2, 1]] print 'matrix0:', matrix0 matrix1 = [[1 for i in range(2)] for i in range(3)] prin...
    99+
    2023-01-31
    Python
  • python案例-for循环
    编写一个程序,让用户输入3个数字:(f)rom,(t)o和(i)ncrement。以i为步长,从f计数到t,包括f和t。例如,如果输入的是f = 2,t = 26,i = 4,程序将输出2,6,10,14,18,22,26。#!/usr/b...
    99+
    2023-01-31
    案例 python
  • Python入门_浅谈for循环、while循环
    Python中有两种循环,分别为:for循环和while循环。 1. for循环 for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次)。for循环的基本结...
    99+
    2022-06-04
    浅谈 入门 Python
  • 《Python入门到精通》循环语句 while循环,for循环
    「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 循环语句 ...
    99+
    2023-09-04
    python 机器学习 人工智能
  • Python基础:for、while循环
    一、While循环 条件控制循环,while后面的condition是真,执行代码块;假,退出循环。可以使用break,强制退出循环。使用else,运行while正常结束时执行的代码块。(break和return退出不执行else)使用co...
    99+
    2023-01-31
    基础 Python
  • python for循环if-else使
    mylist = [-1,0,1,2,3,4]; a = [i*2 for i in mylist];print(a) #[-2, 0, 2, 4, 6, 8] a = [i*2 for i in mylist if i>0];pr...
    99+
    2023-01-31
    python
  • python for 循环获取index
    此篇博客为粘贴复制,原文地址:https://blog.csdn.net/hqtc123/article/details/49848793 使用 enumerate 函数 可以返回下标。 例如 for inx, val in en...
    99+
    2023-01-31
    python index
  • python基础之for循环
    For 循环 可以遍历字符串,也可以遍历列表 # for 循环 # 语法特点:遍历操作,依次取集合容器中的几个值 # for 临时变量 in 容器: # 执行代码...
    99+
    2024-04-02
  • Python全栈之for循环
    目录1. 双向循环的练习2. break_pass_continue的使用3. for循环小提示:4. 小练习问题:答案:总结1. 双向循环的练习 # 1.用两个循环完成十行十列...
    99+
    2024-04-02
  • python for循环怎么用
    for 循环是一种用于遍历序列中每个元素的迭代结构。它的语法为:for variable in sequence:循环体(在每次迭代中执行)如果未被终止,则执行 else 子句(可选) ...
    99+
    2024-05-22
    python 可迭代对象
  • Python的while循环和for循环如何使用
    本文小编为大家详细介绍“Python的while循环和for循环如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python的while循环和for循环如何使用”文章能帮助大家解决疑惑,下面跟着小编...
    99+
    2024-04-02
  • python中的for循环对象和循环退出
    判断条件,1位true,0是flesh,成立时true,不成立flesh,not取反 if  1;      print 'hello python'    print 'true'   not取反,匹配取反,表示取非1大于2的正确...
    99+
    2023-01-31
    对象 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作