笔记二主要包括:切片,迭代,列表生成式,生成器和迭代器
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
这次的学习笔记就写到这里咯,要是有读者对相关的方法不理解的,可以阅读廖雪峰老师的博客哦!谢谢大家阅读!

被折叠的 条评论
为什么被折叠?



