切片
Slice,取指定索引范围的操作
L=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
L[0:3] |
获取0到2 |
L[:3] |
获取0到2 |
L[10:20] |
获取10到19 |
L[-1:] |
获取最后一个元素
扫描二维码关注公众号,回复:
3300970 查看本文章
|
L[-3:] |
获取最后三个元素 |
L[::5] |
所有数,每5个取一个 |
L[:10:2] |
前10个数,每两个取一个 |
L[:] |
复制整个list |
tuple、str都可以使用切片
(0,1,2,3,4,5,6,7,8,9)[:3]
'ABCDEFGH'[0:5]
迭代
Iteration,遍历,通过for…in来完成,for…in不止可以用在list或tuple上,还可以用在其他可迭代对象上。
d={'a':1,'b':2,'c':3}
for key in d:
print(key)
for value in d.values():
print(value)
for k,v in d.items():
print(k,v)
判断对象是否可以迭代,通过collection模块的Iterable类型判断
from collection import Iterable
isinstance('abc',Iterable) True
isinstance([1,2,3],Iterable) True
isinstance(123,Iterable) False
Python内置的enumerate可以把一个list变成索引-元素对
for i,value in enumerate(['A','B','C'])
print(i,value)
所有的可迭代对象都可以使用for循环,包括自己定义的类型
列表生成式
List Comprehensions
[x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
import os
[d for d in os.listdir('.')]
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt','python.exe', 'python3.dll', 'python36.dll', 'pythonw.exe', 'Scripts', 'tcl','Tools', 'vcruntime140.dll', 'workspace']
L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=[s.lower() for s in L1 if isinstance(s,str)]
print(L2)
['hello', 'world', 'apple']
生成器
generator,可以一边循环一边计算的机制,在Python中可以通过列表生成式改成generator,也可以通过函数来实现复杂逻辑的generator
通过将列表生成器[]改变成()来创建一个generator
g=(xfor x in range(1,20))
通过函数来创建generator,如果一个函数包含yield关键字,这个函数就不再是一个普通函数,而是一个generator。变成generator的函数与普通函数执行流程不同,每次调用next()执行,遇到yield语句返回,下一次从上次返回的yield语句继续执行
deffib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
generator可以使用next()来获取generator的下一个返回值
next(g)
generator也可以使用for循环来迭代它
for n in g:
print(n)
要想拿到generator的返回值,要先捕获StopIteration错误,返回值包括在stopIteration的value里面。
while True:
try:
x=next(g)
print('g',x)
except StopIteration as e:
print('Generator return value:',e.value)
break
迭代器
凡是可以用for循环的对象都是Iterable类型
凡是可用作next()函数的对象都是Iterator类型,它们代表一个惰性计算的序列
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数来获得一个Iterator对象
for循环本质上是通过不断调用next()函数来实现的