首页 > 代码库 > 浅析python列表解析和迭代

浅析python列表解析和迭代

    要看懂列表解析,首先要知道几个定义,第一个是python的解释器,虽然大多数时候,我们都将python当作一门编程语言来看待,实际上,python也是一个名为解释器的软件包,解释器是一种能让其他程序运行起来的程序,如果你写了一段代码,让python解释器读取程序,并且按着命令执行,得出结果,实际上,解释器是代码雨计算机硬件之间的软件逻辑层,计算机上安装的python程序就是一个解释器和一些基本的库,例如os,sys模块,是最基本的包。值得一提的是在python的解释器里面运行。第二个是迭代器(iterate),迭代器是一种对象,它可以用来遍历标准模版库容器中的所以或者部分元素,例如对列表进行迭代,是最基本的迭代,列表就是一个可迭代对象,

    先看看这两个例子:

    手动构建一个表达式结果的列表:

     list1=[1,2,3,4,5,6,7]

     list2=[]

     for i in list1:

           list2.append(i +10)

      print list2

       在方括号内:

       list1=[1,2,3,4,5,6,7]

       list2=[x + 10 for x in list1]

       print list2

        这两个简单的例子主要是想让大家知道,手动构建与在方括号内运算方式的区别,手动for 循环进行遍历是常规的python代码进行列表的遍历,而在方括号遍历是以C语言的速度来执行的,往往速度会快很多,一般可以快一倍左右,我们生物信息数据往往比较大,优化脚本可以提高速度,便于提高工作效率。

    接下来我们看下,几个比较典型的函数:

第一个是zip函数:我们直接用例子来理解zip函数

    zip([1,2],[3,4])

    [(1,3],(2,4)]

    zip解析输入的所有列表,一次按照位置输出组成的元组,最后形成一个列表,类似于二维数组的列表

    值得一提的是在python3中zip将不是直接返回一个列表,而是直接生成一个迭代器,如果要生成一个列表,必须要用list()将返回的迭代器强制变成一个列表

   然后看看map函数

 这个函数比较实用,我们也用一个例子来解释它:

    map(abs,[1,-1,-2])

    [1,1,2]

    map将根据abs函数对列表中的每个数值依次处理,然后放回一个新的列表

    同样的,在python3中,map将返回一个迭代器,而不是列表。同样需要用list()将其强制转换成列表

    filter函数也是一样的:

    filter(bool,[’spam’,’’,’ni’])

    [’spam’,’ni’]

    对于传入的函数返回true的每一项都返回

    再来说下迭代器相关的:

    手动迭代器和内置函数的迭代器的不同:

    在python3.X中手动迭代器定义给多个变量时,各个变量会记住其各自的位置,但是内置函数生成的迭代器,例如前面讲的map,zip,和filter自定生成的迭代器,不能定义给多个变量,即不能支持相同结果上的多个活跃的迭代器来句两个例子说明吧

    第一个是手动迭代器:

    R= range(3)

    I1 = iter(R)

    I2 = iter(R)

    next(I1)

    0

    next(I2)

    0

    这两个迭代器是相同的,但是他们各自独立,迭代的时候会记住各自的位置

    再看看内置函数返回的迭代器:

    filter(bool,[’spam’,’’,’ni’])

    <filter object at Ox0269C6D0> # python3.X中filter返还的是一个迭代器

    R =  filter(bool,[’spam’,’’,’ni’]) 

    I1= iter(R) 

    I2=iter(R)

    next(I1)

    0

    next(I2)

    1

    这个内置函数生成的迭代器不支持相同结果上的多个活跃的迭代器

    同样的zip和map,也不支持,至于为什么会这样的更改,我想等我学到后面会了解到

By milkcookie

FAFU

浅析python列表解析和迭代