声明
本文是对廖雪峰教程学习所记笔记,原文链接如下
- https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856
切片
切片的常见用法如下所示:
前提,存在list L或者是tuple L
形式 | 意义 |
---|---|
L[0:3] | 取索引为0、1、2的元素 |
L[:3] | 取索引从0开始,到2为止的元素 |
L[3:] | 取索引从3开始,一直到list的最后一个元素(包括最后一个元素) |
L[-3:-1] | 取从倒数第三个元素开始(包括倒数第三个元素),到最后一个元素为止(不包括最后一个元素)的元素 |
L[:-3] | 取从第一个元素开始(包括),到倒数第三个元素为止(不包括倒数第三个元素)的元素 |
L[-3:] | 取从倒数第三个元素开始(包括),到最后一个元素为止(包括)的元素 |
L[0:10:2] | 索引从0到9的数,每隔2个取一个 |
L[:] | 取所有数 |
L[::2] | 对所有数,每隔2个取一个 |
扩展
- 可以直接在list或者tuple之后跟切片,例如:(0, 1, 2, 3, 4, 5)[:3]
- 字符串可以当做list使用切片,例如:== ‘ABCDEFG’[:3]==
迭代(iteration)
使用for ... in ...:
实现,不仅可以用于list、tuple,还可用于其他的可迭代对象,即使其没有下标,例如dict。
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print('%s : %d' %(key,d[key]))
for value in d.values():
print(value)
for k,v in d.items():
print(k,v)
运行结果如下:
a : 1
b : 2
c : 3
1
2
3
a 1
b 2
c 3
判断是否可迭代
通过collections
模块的Iterable
进行判断
如下所示:
from collections.abc import Iterable
print(isinstance('ABC',Iterable))
print(isinstance(123,Iterable))
#结果:
#True
#False
列表生成式
格式 | 生成列表 |
---|---|
list(range(10)) | [0,1,…,9] |
list(range(1,10)) | [1,2,3,…,9] |
[ x*x for x in range(1,10) ] | [1,4,9,…,81] |
[ x*x for x in range(1,10) ] | [1,4,9,…,81] |
[ x*x for x in range(1,10) if x%2==0] | [4,16,36,64] |
[ m+n for m in ‘ABC’ for n in ‘abc’] | [‘Aa’,‘Ab’,‘Ac’,‘Ba’,‘Bb’,‘Bc’,‘Ca’,‘Cb’,‘Cc’] |
L=['hE','She'] [s.lower() for s in L] | [‘he’,‘she’] |
举例:
L1 = ['Hello', 'World', 18, 'Apple', None]
print([s.lower() for s in L1 if isinstance(s,str)])
#结果
#['hello', 'world', 'apple']
生成器(generator)
过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
创建生成器的方法:
- 将列表生成式中的
[ ]
改为( )
- 使用
yield
,函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
获取生成器的元素:
- 使用
next
获取generator的下一个返回值 - 使用
for循环
获取generator的值,generator是可迭代对象
普通函数调用返回结果,而generator的函数“调用返回一个generator对象
以下是使用generator生成杨辉三角的示例:
def triangles():
count=1
l=[1]
while True:
i=1
yield l
count = count + 1
t=l
l=[]
l.append(1)
while i<=(count-2) :
l.append(t[i]+t[i-1])
i=i+1
l.append(1)
return 'done'
n=0
for t in triangles():
print(t)
n=n+1
if n==10:
break
结果
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
迭代器(Iterator)
首先明确迭代器Iterator<>Iterable
,即list、tuple等都不是Iterator,但是可以用iter()
函数将他们转化为Iterator对象。