# ====================切片操作======================

# 切片操作可以让你轻松的取元素

L=[]
for i in range(100):
    L.append(i)

print(L[0:3])   #取前三个元素
print(L[55:65]) #取中间的10个元素
print(L[-10:])  #取倒数10个元素
print(L[-20:-10])   #取倒数10和倒数20之间的元素


print(L[0:100:10])  #从0到100取,每次隔10个
print(L[::20])      #省略形式,所有数,每20取一个


# ===========================列表生成式==========================

# 配合for关键字迅速生成各种形式的list

L=[x*x for x in range(1,11)]    # 注意range的区间为[),生成n^2序列
print(L)

L=[m+n for m in 'ABC' for n in 'XYZ']   #2项组合也没问题,当然可以N项随意组合了
print(L)


import os
L=[d for d in os.listdir('.')]
print(L)



# ===================================生成器===========================

# 节约内存的好办法,下一个元素不用直接取到内存,通过生成器可以推导出来


#创建生成器方法一:列表生成式的[]改成()即可
L=(x*x for x in range(1,11))        

for i in L:     # 通过for循环来打印生成器中的值,本质是调用了next()方法
    print(i)        


#创建生成器方法二:函数中包含yield则该函数变为一个生成器
#在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。



# ==========================================iterator==================

# 凡是可作用于for循环的对象都是Iterable类型;

# 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

# 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

# Python的for循环本质上就是通过不断调用next()函数实现的,例如: