一、切片
形式:列表[start::end]
start // 可以省略,缺省时默认从0开始,可以为负值,负值从右侧开始
://不能省略
: //可以省略,存在时end的意义表示为间隔长度
end //可以省略,缺省表示到选取方向的末尾,可以为负号,表示右侧数第几个,如果和start同为负数,切end小于等于start,则返回空
l = (1,2,3,4,5,6,6,7,7,8,8,9)
l[3:9]
(4, 5, 6, 6, 7, 7)
l[3:-3]
(4, 5, 6, 6, 7, 7)
l[-3:-3]
()
作业实现,strip()的效果
#!/usr/bin/env python3
#encoding=utf-8
def trim(str):
print(str)
while str[0]==' ':
str = str[1:]
print(str)
print(len(str),str)
while str[len(str)-1]==' ':
str = str[:-1]
print(str)
二、迭代
这一节小知识点比较多
2.1 判断是否支持迭代
1.from collections import Iterable // 引入迭代器类型
2.isinstance(目标,Iterable) // isinstance 类似与js中的instanceOf,返回结果是布尔类型
isinstance("abc",Iterable) // True
isinstance(123,Iterable) // Fasle
2.2 dict的迭代
-
正常迭代,但是顺序不可控
-
默认迭代的keys
-
可以使用for item in dict.valus()
-
可以迭代item for item in dict.items()
类比,set类型的数据如果迭代
作业,求max和min,返回一个tuple,默认返回就是tuple哈#encoding=utf-8 def min(l=[4,5,1,66,11,5]): min = l[0] max = l[0] for item in l: if item < min: min = item if item > max: max = item return min,max
三、列表的生成式
这个应该在之前的学习中已经出现过几次了,就是快速的生成列表
语法如下
list(range(10)) // 生成 从0开始
接下来就是见证奇妙的时候的了
[x*2 for x in range(10)] // 生成一个偶数数组,确实很简单
本质就是简化了迭代器的写法,将返回结果放到[]中
作业 过滤非字符串
#!/usr/bin/env python3
#encoding=utf-8
def list(L=['Hello', 'World', 18, 'Apple', None]):
return [item.lower() for item in L if isinstance(item,str)]
//执行
>>> from list import list
>>> list()
['hello', 'world', 'apple']
四、生成器(generator)
生成器和上面的列表生成式,看起来很接近,只有略微的区别
(x*2 for x in ranger(10))
但是本质的原理差别不小
- 生成器保存的是算法的本身,不会在立刻生成需要的列表,只是在需要的时候才会真正的生成
- 调用的方式是next(l),但是这样有个弊端就是在列表的最后一个元素,python会抛出一个错误
- 所以一般是以for循环的方式进行调用
- 可以自己定义生成器,和不同函数的区别,generator中有关键字yeild ,当执行生成器时,到yeild时会返回,下次执行时会接着yeild继续执行。
- 生成器和函数的区别也表现在返回值上,函数的返回值是函数的值,生成器的返回值是一个generator对象。