一些别的

一些别的

切片

在list和tuple 中可以截取其中的一部分。
切片的索引从0开始,最后一位可以使用索引-1表示
L[::2]表示切片步长,从开始到结尾以2为步长选取数据。

L[0:3]表示选取前三个数,下面索引0 1 2,即到3为止前面的集合。

str也可以使用切片

迭代

如果给定一个list或tuple,可以通过for循环来便利整个list或tuple,这种遍历成为迭代(Iteration)。
for ... in ...用来完成迭代。
for迭代除了可以用在list或tuple上,还可以使用在其他可迭代对象上。比如dict,没有下标也可以使用迭代。由于dict没有下标没有顺序,所以迭代出来的数据顺序可能与之前不同。默认情况下,dict迭代的是key。
如果需要迭代value则需要调用for value in dict.value()
如果需要同时迭代key和value,则需要调用for item in dict.item()

如何判断一个对象是可迭代对象?
通过使用collections模块的Iterable,进行判断:

from collections import Iterable
isinstance('abc',Iterable)

如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C

列表生成器

list(range(1,11))可以生成一个list。

if加入到列表生成器中:

L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s.lower() for s in L1 if instance(s, str)]

L2 = ['hello', 'world', 'apple']

即使用if对列表生成器进行判断。

生成器generator

由于列表容量是有限的,所以如果列表成员过多的话会浪费很大内存引起浪费。
生成器是用来生成一个可以推算出来的序列。
方法一:将列表的[]改为()

>>> L = [x * x for x in range(10)]  #list
>>> L
[0,1,4,9,16,25,36,49,64,81]
>>> g = (x * x for x in range(10))  #generator
>>> g
<generator object <genexpr> at 0x1022ef630> #返回值为一个生成器

可以使用next()函数获得generator的下一个元素。next(g)依次获取下一个值,直到计算到最后一个值,没有元素时,跑出StopIteration异常。
或者,使用for循环获取各个值:

for n in g:
    print(n)

方法二:将函数改为生成器:
例如斐波那契数列,

def fib(max):
    n,a,b = 0,0,1
    while n < max:
        print(b)
        a, b = b, a+b  #使用一行可以将ab重新赋值
        n = n+1
    return 'done'

上述函数只能将数列打印出来,而不能生成list。需要将print(bb)改为yield b即得到一个生成器。
即,如果函数中包含了yield关键字,那么则是一个generator。

与函数执行的顺序不同,generator在每次调用next()时,遇到yield语句返回,再次执行从上次放回的yield处进行。

例:杨辉三角

def triangle():
    b = [1]
    while True:
        yield(b)
        b = [1]+ [b[i]+b[i+1] for i in range(len(b)-1)] + [1]

注意不会执行for i in range(0)

迭代器Iterator

可以直接作用于for循环的数据类型:1.list tuple dict set str,集合数据类型。2. generator生成器。
这些是可以直接用作for循环的对象成为可迭代对象:Iterable。可以使用isinstance()判断一个对象是否是可迭代对象。

>>>from collections import Iterable
>>>isinstance([], Iterable) # 判断[]是否是Iterable

可以被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator
同样可以使用isinstance()判断一个对象是否是迭代器。

生成器都是iterator对象但是list、dict、str虽然是Iterable但不是Iterator。
可以使用iter()函数把list、dict、str等Iterable变成Iterator。

Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值