Python3入门(五)——高级特性
一、切片
对于取指定索引的值,python提供了切片来简化傻傻的循环
list2 = ["apple", "water", "banana", "mango"]
# 取索引0到3,左闭右开
list2[0:3]
['apple', 'water', 'banana']
#起始为0时可以省略
list2[:3]
['apple', 'water', 'banana']
其他诸如负数之类也是一如既往的支持的
更多切片操作,参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856
二、迭代
普通遍历可以使用循环
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
... print(key)
遍历dict也是一样的:for k, v in d.items()
带下标的可以使用enumerate
list1 = ["f", "m"]
for i, e in enumerate(list1):
print(i, e)
三、列表生成式
直接看一个生成偶数平方的例子:
[x*x for x in range(1, 10) if x % 2 == 0]
[4, 16, 36, 64]
列表生成甚至可以嵌套,多层for
四、生成器
这种一边循环一边计算的机制,称为生成器:generator。
创建生成器可以通过把生成式的[]改成():
g = (x*x for x in range(1, 10) if x % 2 == 0)
g
<generator object <genexpr> at 0x000001EED0D203B8>
这里的g保存的就是算法了,那即使这个算法生成的序列非常大也没关系,这里只存算法,后面使用的时候才会算出结果:
g = (x * x for x in range(10))
>>> for n in g:
... print(n)
# 慎用不可控的next(g)来取元素
第二种产生生成器的方法是在函数定义中使用yeild关键字,详细查看廖雪峰老师的博客
五、迭代器
可以直接作用于for
循环的对象统称为可迭代对象:Iterable
。
可以使用isinstance()
判断一个对象是否是Iterable
对象(需导包)
可以通过next()来不断取出下一个值,直到异常抛出(所以一般使用for控制)