Python(八)切片、迭代、列表生成式、生成器

一、切片

在写程序的时候经常会用到取某个列表或者元组中的某一个元素或者是某一段元素,可以使用循环实现,在Python中也可以使用切片实现。

格式:

L1 = ['test1','test2','test3','test4']
print L1
//     开始位置:结束位置,从0开始取值,直到结束位置减一,即 下标元素 0  1
L2 = L1[0:2]
同上
# L2 = L1[:2]
print L2
从下标0开始取值到下标2-1的位置,在这段值期间隔2个取一个值
L3 = L1[0:2:2]
print L3

S = 'ABCDEFGHIJKLMN'
print S[:2]
print S[1:3]
从下标1开始,直到6-1的位置,每隔2个取一个值
 print S[1:6:2]

二、迭代

很容易理解,在C语言中,如果要遍历一个数组一般都是根据数组的下标开始遍历整个数组,然后根据下标访问数组中的元素,但是在Python中,列表字典等这样的,可以通过For...in....直接遍历列表中的元素。这样的遍历方式就是迭代。

参考

三、列表生成式

是Python内置的非常简单却强大的可以用来创建list的生成式

如果要生成一个列表的所有元素,可以通过循环然后将生成的元素追加到列表中,这样也实现了列表的生成,但是比较麻烦,所以在Python中可以通过列表生成式快速的生成一个列表:

s = [x * x for x in range(1, 11)]
print s

这个语句执行的结果是生成一组数据,这些数据存储在列表中。

在写列表生成式的时候把要生成的结果放在前面,后面是一个循环,再循环的后面还可以添加上判断

s = [x * x for x in range(1, 11) if x % 2 == 0]
print s

先执行循环生成一个数据,然后执行后面的判断,然后再执行最后的x*x

还可以使用两层循环

s = [m + n for m in 'ABCDEFG' for n in 'XYZ']
print s

这一语句的实现和C语言的循环嵌套一样,第二个循环在第一个循环里面。最前面的表达式是结果。

还可以使用多个变量

d = {'key1':'value1','key2':'value2','key3':'value3'}
s = [key + '=' + value for key , value in d.iteritems()]
print s

将一个列表中的所有字符串变成小写生成一个列表:

L = ['Hello','World',18,'Apple',None]
k = [x.lower() for x in L if isinstance(x,str)]
print k

内建的isinstance函数可以判断一个变量是不是字符串

isinstance(x, str)
会返回True  False

四、生成器

生成器和列表生成式的差别:列表生成式执行过之后结果都已经生成存储在内存中,生成器执行过之后并没有实际的数据存储在内存中,当你在使用列表生成器中的元素的时候,才会有实际的数据生成。表达式和列表生成式的区别在于一个是[ ]  一个是 ( ),

k = (x.lower() for x in L if isinstance(x,str))
print k

这样直接打印出来的k不是一个数据而是一个地址,如何获取生成器中的数据呢?可以通过生成器的next函数获取。调用一次就会得到下一个元素。生成器也是可以迭代的

L = ['Hello','World',18,'Apple',None]
k = (x.lower() for x in L if isinstance(x,str))
for x in k:
    print x

参考


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值