zoukankan      html  css  js  c++  java
  • python 的列表遍历删除

    python 的列表遍历删除

    python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错,例如

    l = [1,2,3,4]
    for i in l:
        if i != 4:
        l.remove(i)
    print l
    这几句话本来意图是想清空列表l,只留元素4,但是实际跑起来并不是那个结果。再看下面,利用index来遍历删除列表l
     
    l = [1, 2, 3, 4]
    for i in range(len(l)):
        if l[i] == 4:
            del l[i]

    print l
    这样没问题,可以遍历删除,但是列表l如果变为 l = [1,2,3,4,5]
    如果还是按照上面的方法,设想一下,range开始的范围是0-4,中间遍历的时候删除了一个元素4,这个时候列表变成了= [1,2,3,5],这时候就会报错了,提示下标超出了数组的表示,原因就是上面说的遍历的时候删除了元素
     
    所以python的list在遍历的时候删除元素一定要小心
     
    可以使用filter过滤返回新的list
     
    l = [1,2,3,4]
    l = filter(lambda x:x !=4,l)
    print l
     
    这样可以安全删除l中值为4的元素了,filter要求两个参数,第一个是规则函数,第二个参数要求输入序列,而lambda这个函数的作用就是产生一个函数,是一种紧凑小函数的写法,一般简单的函数可以这么些
     
    或者可以这样
    l = [1,2,3,4]
    l = [ i for i in l if i !=4]//同样产生一个新序列,复值给l
    print l
     
    或者干脆建立新的list存放要删除的元素
    l = [1,2,3,4]
    dellist = []
    for i in l:
        if i == 4:
            dellist.append(i)
    for i in dellist:
        l.remove(i)
    这样也能安全删除元素
    所以要遍历的时候删除元素一定要小心,特别是有些操作并不报错,但却没有达到预期的效果
     
    上面说到产生新序列,赋值等等,用python的id()这个内置函数来看对象的id,可以理解为内存中的地址,所以有个简要说明
    如果
    l = [1,2,3,4]
    ll = l
    l.remove(1)
    print l//肯定是[2,3,4]
    print ll//这里会是什么?
    如果用id函数查看的话就发现
    print id(l),id(ll)
    打印出相同的号码,说明他们其实是一个值,也就是说上面的print ll将和l打印的一样,所以python有这种性质,用的时候注意一下就行了
     
     
    分类: python语言

    构建Python+Selenium2自动化测试环境<一>

     

      很久没有了解自动化了,最近发现项目中沉淀了很多东西,回归测试效率很低,所以必须要考虑构建自动化来提供各个环节的小效率。由于忙于需求以及产品的流程规范,现在对于测试技术方面的研究也相对少了很多。不过不管做什么,做好最重要!自动化几年前研究过一套框架,由于各方面原因一直没有推广起来,也导致我的自动化发展之路还没出生就胎死腹中。现在搞自动化主要是出于团队建设考虑,一方面为了提供测试部门的工作效率,保障产品质量;另一方面,也是为了提升团队成员的测试技能,保证Team良性发展。不过不管如何,自动化是必须要搞,不然繁琐的回归测试是没有任何效率保证和质量保障的。

      初步计划通过Python作为脚本语言,Selenium作为web端的测试工具,目前主要是基于web端来构建的。本节主要记录简单搭建Python+Selenium测试环境的过程,具体如下:

      基础环境:windows 7 64bit

      1、构建python开发环境,版本为当前最新版本python2.7.5

      在python官方网站选择下载最新windows安装包:python-2.7.5.amd64.msi,注意这里选择64bit的。安装完之后,需要在系统的环境变量path中加入C:\Python27,然后可以在命令行,看到如下:

        

      备注:以上表示,python安装成功,且path配置也ok!

      2、SetupTools和pip工具安装,这两个工具都是属于python的第三方工具包软件,有点类似于linux下的安装包软件,不过pip比SetupTools功能更强大。

      SetupTools官方解释:Download, build, install, upgrade, and uninstall Python packages -- easily!

      在python的官方网站上可以找到SetupTools的下载,这里Windows只提供了32bit的下载,setuptools-0.6c11.win32-py2.7.exe,直接双击安装即可。

      pip官方解释:A tool for installing and managing Python packages.

      cmd进入命令行:easy_install pip 在线安装即可。

      备注:此处需要注意的是,当安装SetupTools之后,就可以在python安装目录下看到Script目录,如下图所示:

      

      这个目录生成之后,需要在系统环境变量的中加入 path:C:\Python27\Scripts,然后才可以在命令使用easy_install命令进行pip在线安装。

      3、安装Selenium

      这里因为需要将Python和Selenium进行组合,当然Selenium也提供了基于python的实现,所以就需要把Selenium的包安装到python库中去,以便于python开发时进行调用。

      在cmd进入命令行:pip install selenium  执行之后,将自动化搜寻最新的selenium版本下载并安装,如下图所示:

      

      以上显示,则表明在线安装selenium成功!

      4、Python+Selenium的Sample

      这里可以直接在python的编辑中编写如下程序,并保存hello_selenium.py  

    复制代码
    1 from selenium import webdriver
    2 
    3 driver = webdriver.Firefox()
    4 driver.get("http://www.so.com")
    5 assert "360搜索".decode('utf-8') in driver.title
    6 
    7 print driver.title
    8 
    9 driver.close()
    复制代码

      在python编辑器里面操作F5运行即可,看看是否成功调用Firefox浏览器。。。

      以上一个基础的Python+Selenium的自动化环境已经搭建完成。  

     
     
  • 相关阅读:
    java 8 , merge()
    2026 11 12
    koda java
    Linq实现between拓展
    WinForm开发----关闭window窗体最好的办法
    ASP.NET中指定自定义HTTP响应标头
    使用Zxing.net实现asp.net mvc二维码功能
    实现asp.net mvc页面二级缓存,提高访问性能
    队列应用
    Ubuntu 12.04使用uginx+fastcgi-mono-server2部署asp.net 网站
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3117260.html
Copyright © 2011-2022 走看看