【Python基础】Python-学习笔记二-高级特性

笔记二主要包括:切片,迭代,列表生成式,生成器和迭代器
Let‘s go!

Part one:
切片的内容:普通的获取元素的方法,利用切片获取元素的方法,正数索引切片,负数索引切片,列表前6个数每隔两个取一个,获取整个列表

普通的获取元素的方法:

>>> L = [1,2,3]
>>> L[0]
1
L = []
for i in [1,2,3]:
    L.append(i)
print(L)
[1, 2, 3]

利用切片获取元素的方法: 注意[0:1]不包括下标为1的值

>>> L = [1,2,3] 
>>> r = L[0:1]
>>> r
[1]

利用负数索引获取值

>>> L = [1,2,3,4,5,6]
>>> L[-2:-1]
[5]

每隔2个元素获取一次值

L[::2]
[1, 3, 5]

利用切片获取整个列表

L[:]
[1, 2, 3, 4, 5, 6]

Part two:
迭代的内容:对列表迭代,对字典迭代打印key,打印value,打印key 和value,判断一个对象是否是可迭代对象的方法

!!!注意 只要是可以迭代的对象(即Iterable 型的对象) 均可以用for来迭代,常见的可迭代的对象有 列表,元组,字典,字符串 等
对列表迭代:

>>>for i in [1,2,3,4]:
        print(i)

1 2 3 4

对字典迭代打印key,打印value,打印key 和value:

>>>d = {'Richard':1,'Lee':2,'Ann':3}
for key in d:
    print(key)

for value in d.values():
    print(value)

for key,value in d.items():
    print(key,value)

Richard
Lee
Ann
1
2
3
Richard 1
Lee 2
Ann 3

判断一个对象是否是可迭代对象的方法:要利用 collections 里面的 Iterable 去判断

>>>from collections import Iterable
isinstance('Lee',Iterable)
isinstance([1,2,3],Iterable)
isinstance((1,2,3),Iterable) #元组也是可以迭代的哦
isinstance(213,Iterable)
True
True
True
False

Part three:
列表生成式的内容:生成x平方的列表,生成一到十的所有偶数组成的列表

优点:仅仅使用一句代码就可以生成一个列表

生成x平方的列表:

>>>[x*x for x in [1,2,3,4]]
[1, 4, 9, 16]

生成一到十的所有偶数组成的列表:

>>>[x*x for x in range(1,11) if x%2==0]
[4, 16, 36, 64, 100] 

Part four:
生成器的内容:打印generator的每一个值 将函数变成一个generator 函数和变成generator函数

!!!在Python中生成器(generator)会边循环,边计算下一个值(即generator保存的是算法)

将列表生成式变成生成器:就是将[] 变成了 ()

>>>[x*x for x in range(5)]   #列表生成式
[0, 1, 4, 9, 16]

>>>g = (x*x for x in range(5))  #生成器
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>>next(g)
StopIterationTraceback (most recent call last)<ipython-input-45-9bc1d6708ce1> in <module>()
      5 next(g)
      6 next(g)
----> 7 next(g)
StopIteration: 

由上面的例子可以看到,每一次打印出生成器的值都需要用 next() 函数,非常麻烦!在实际写代码中用到的都是 for 循环去打印值。

将函数变成一个generator 函数和变成generator函数:就是将函数中的 print 换成 yield 。
以斐波拉契函数为例子

>>>def fib(num): 
    a = 0
    b = 1 
    for i in range(num):
        print(b)
        a,b = b,a+b
    fib(5)
    return 'done'
1
1
2
3
5
#这是普通的函数定义
>>>def fib(num): 
    a = 0
    b = 1 
    for i in range(num):
        yield(b)
        a,b = b,a+b
    for i in fib(5): 
        print(i)
1
1
2
3
5
#此时这个fib函数是一个生成器(generator)

!!!将函数变成一个generator 函数和变成generator函数的区别:
普通的函数当遇见return语句时会结束,但是一个生成器在遇到yield时就会结束,下次会接着yield的下一条语句继续程序。

Part five
迭代器的内容:如何判断iterable和iterator 常见的iterable和iterator 有哪些 怎么将 iterable 转化为iterator

注意:str list dict 不是iterator哦,凡是可以用for迭代的都是 iterable,凡是可以用next()函数的都是 iterable。

判断iterable和iterator: iterable的方法:在上面的Part two 部分提到过,判断iterator用到的方法是一样的。

>>>from collections import Iterator
isinstance('acs',Iterator)
False

将非iterator对象变为iterator对象:

>>>from collections import Iterator
isinstance(iter('acs'),Iterator)
True

这次的学习笔记就写到这里咯,要是有读者对相关的方法不理解的,可以阅读廖雪峰老师的博客哦!谢谢大家阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值