浅析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

时间: 2024-10-11 22:08:18

浅析python列表解析和迭代的相关文章

python列表解析

#!/bin/env python #这句会生成一个列表[0,1,2,3,4,5,6,7,8,9] list_a = [item for item in range(10) ] #下面对这个列表进行筛选(条件为偶数) list_b = [item for item in list_a if(item%2==0)] #这样就可以筛选出列表中的偶数 #其实列表解析可以看成是这样的 #[变量(或变量运算表达式)      迭代器(可迭代对象 相当于是一个for循环)     筛选条件] #下面这个会生

python列表解析和生成器表达式

列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析.列表解析表达式为: [expr for iter_var in iterable] [expr for iter_var in iterable if cond_expr] 第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表. 第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相

Python 列表解析

定义:快速形成列表的方式 例: 旧的生成方式:l=[] for i in range(10): if i >=5: l.append('egg%s' %i) print(l) 列表解析生成:#获得5以后的蛋的列表 l=['egg%s' %i for i in range(10) if i >=5]print(l) #获得3以后的列表中的值的平方列表 nums=[1,2,3,4,5,6]nums_new=[item**2 for item in nums if item > 3]print

Python 列表解析(列表生成式)

列表解析也成列表生成式,是将for循环和创建新元素的代码合并成一行,并自动附加新元素,如下面例子: 1 >>> squares = [i**2 for i in range(1,10)] 2 >>> squares 3 [1, 4, 9, 16, 25, 36, 49, 64, 81] 要使用别表生成式,首先要定义一个列表名,如此处的squares,然后定义一个表达式,如此处的i**2,最后编写一个for循环,用于给表达式提供值. 完全用for循环替换的代码为: 1 s

学习日志---python(列表解析、生成器、字典和集合)

产生列表可以用range(); 列表解析 对一个序列进行解析生成新的列表:列表解析比for的性能好很多: a=[x for x in range(0,10) if x > 5] print a a=[x+1 for x in range(0,10) if x > 5] print a 利用列表中的表达式可以得出所需的列表,无需在用for循环得到: 双重嵌套:用更简便的语句得出里列表: a=[(x,y) for x in range(3) for y in range(3)] print a 解

python 列表解析字典的两个小方法

Python zip 函数. zip函数接受任意多个(包括0个和1个)序列作为参数 list1 = ["k1","k2","k3"] list2 = [1,2,3]list = list b = dict(zip(list1,list2)) print(b) #输出结果,zip函数的基本的方式. {'k3': 3, 'k2': 2, 'k1': 1}

for 循环新的写法==列表解析

1. (for x in L1) 是一个可迭代对象: 2. 列表解析比for 循环快,列表解析的迭代在解释器内部是以C语言速度执行, 而不是手动python代码执行: (x+10 for x in L1) = for x in L1: L1.append(x+10) >>>for x in L1: >>> L1[x] +=10 3. 可以两个循环混合在一起,列表解析:a = [x+y for x in '你好吗?' for y in '我爱你中国!'] 

Python自动化运维之7、格式化输出、生成器、迭代器、列表解析、迭代器表达式

Python格式化输出: Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] (1)百分号格式化 %[(name)][flags][width][.precision]typecode .... (name) 可选,用于选择指定的key flags 可选,可供选择的值有: + 右对齐:正数前加正好,负数前加负号: - 左对齐:正数前无符号,负数前加负号: 空

Python之 迭代器 列表解析器

回顾: 1.动态语言 sys.getrefcount()  对象被引用的次数. 增加对象引用次数的场景:以赋值方式创建对象:对象作为某容器的元素时:被当做参数传递给函数时:为对象创建另外的变量名: 减少引用计数:引用此对象的某变量名被显式销毁 del x :给引用此对象的变量名重新赋值:从容器中移除对象,list.pop():容器本身被销毁: 完备和非完备遍历 Python迭代器 又称游标,是程序设计的软件设计模式,是一种可在容器物件上实现元素遍历的接口.是一种特殊的数据结构,在Python中,