正如python入门超easy系列(二)中所说,玩转列表即玩转python
众所周知,python是世界上入门最简单的语言!?——周某人
列表生成器
- 使用场景:在使用列表时,很多时候我们不会一下子使用数据,通常都是一个一个使用;当数据量较大的时候,定义一个列表会是程序内存占用突然增大,为了解决此类问题,python中引入了生成器。
- 生成方式:
-
方式一:将列表生成式的
[]
改成()
即可# 列表生成式 lt = [i for i in range(10)] print(lt) # 列表生成器 lt = (i for i in range(3)) print(lt) # 可以转换为列表 # print(list(lt)) # 可以进行遍历 # for i in lt: # print(i)
-
方式二:在函数中使用
yield
关键字def test(n): for i in range(1, n+1): # 执行到此处,函数会返回yield后的内容,然后会停止在这里 yield i t = test(3) # print(t) # 可以一个一个提取 print(next(t)) print(next(t))
-
- 使用说明:
- 生成器对象保存的是特定数据的生成算法,而不是特定的所有数据
- 使用任意一种方式操作都是单次的
- 生成器可以做的操作:遍历、next、转换为列表
可迭代对象 (Iterable_object)
在介绍可迭代对象之前,我们需要了解什么是迭代器(Iterator)
- 迭代器的定义:能够使用for-in进行遍历,并且可以使用next函数进行迭代的对象
- 说明:
-
生成器就是一种特殊的迭代器
-
判断一个对象是否是迭代器
from collections import Iterator # 判断是否是迭代器 print(isinstance(lt, Iterator))
-
字符串以及容器类型的对象都不是迭代器,但是它们都是可迭代对象
-
可迭代对象
- 定义:可以使用for-in遍历的对象,都是可迭代对象
- 说明:
-
前面学习过的字符串以及容器类型的对象都是可迭代对象
-
迭代器一定是可迭代对象
-
判断一个对象是否是可迭代对象:
from collections import Iterable, Iterator lt = [1, 2, 3] # 判断是否是可迭代对象 print(isinstance(lt, Iterable)) # 判断是否是迭代器 print(isinstance(lt, Iterator))
-
iter:可以将可迭代对象转换为迭代器:
lt = [1, 2, 3] # 将可迭代对象转换为迭代器 lt2 = iter(lt)
-
高级函数
有了以上迭代器和可迭代对象的知识的支撑,我们可以学习一个很炫酷的东西叫做高级函数
map
-
参数:
func:一个函数 iter:一个可迭代对象
-
功能:将可迭代对象遍历,每个元素都使用该函数处理一遍,然后返回,保存这种算法的迭代器
-
使用:
from collections import Iterator lt = [1, 2, 3, 4, 5] def pingfang(n): return n * n # 返回map对象,是一个迭代器 # ret = map(pingfang, lt) ret = map(lambda x: x*x, lt) print(isinstance(ret, Iterator)) print(list(ret))
-
举例:使用map函数:将一个元素全是字符串的列表进行处理,去掉两边空白,然后首字符大写:(Tips:相关字符串操作函数,结尾总结)
string = [" asdaasd123456dsdaad ", " 54df5as3d5f4 "] ret = map(lambda x: (x.strip(' ')).capitalize(), string) print(list(ret))
filter
-
参数:
function:一个函数 iterable:可迭代对象
-
功能:使用function依次作用于可迭代对象中的每个元素,当返回结果为True时保留该元素。返回filter对象,是一个迭代器。
-
示例:
lt = [1, 2, 3, 4, 5] def oushu(n): return n%2 == 0 # 返回filter对象,是一个迭代器 # ret = filter(oushu, lt) ret = filter(lambda x: x%2 != 0, lt) print(ret) print(list(ret))
-
举例:使用filter函数,提取一个任意列表中长度大于3的字符串元素。
string = [ "sdfasdfasdf", "sdf", "ds", "dsfasdfs" ] ret = filter(lambda x: len(x) > 3, string) print(list(ret))
reduce
-
参数:
function:一个函数 sequence:一个序列
-
功能:
- 首先从序列中取出前两个元素,作为function的参数处理一下
- 处理完的结果与下一个元素再使用function处理一下
- 处理结束,将处理完的结果返回
-
示例:
from functools import reduce lt = [1, 2, 3, 4, 5] def add(a, b): return a + b # 方法一: # ret = reduce(add, lt) # ret = reduce(lambda x, y: x*y, lt) # 方法二 ret = reduce(lambda x, y: x*10 + y, lt) print(ret)
-
举例:使用reduce函数实现,求一个列表中所有元素的乘积
from functools import reduce lt = [1, 2, 3, 4, 5] def add(a, b): return a + b ret = reduce(lambda x, y: x * y, lt) print(ret)
零碎小知识(字符串函数的补充)
-
strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
-
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
-
示例:
string = "asdaasd123456dsdaad" print(string.strip("asd")) # out: 123456 print(string.lstrip("asd")) # out:123456dsdaad print(string.rstrip("asd")) # out:asdaasd123456
下期预告:下一期将讲解Python入门中比较有意思的面向对象知识点。
Tips:如有疑问欢迎随时打扰 ???