迭代器/生成器
Python分析建模,日常问题整理(八)
2018.09.10~2018.09.16
- 1 join
通过指定字符连接序列中元素后生成的新字符串。只能对字符串作用。
print('-'.join(list(map(str,list(range(0,10)))))) # 短线连接
print('\n'.join(list(map(str,list(range(0,10)))))) # 提行连接
print('\n'.join([' '.join(['%sx%s=%-2s' % (y,x,x*y)
for y in range(1,x+1)]) for x in range(1,13)])) ##13*13乘法表生成代码
-
2 map
map(str,list_a)
将列表的每个元素转化为字符型
map(int,list_a)
将列表的每个元素转化为数值型 -
3 eval
eval()
函数用来执行一个字符串表达式,并返回表达式的值。
print(eval(input))
生成计算器,并打印计算结果 -
4 iter
for i in ...中作用与for的对象,为可迭代、循环的(literable)对象,数据类型可以是:list/tuple/dict/set/str
可以被next()函数不断返回下一个值的对象称为迭代器:Iterator
list/dict/str
都不能用next函数,需要用iter
函数转化后才能成为迭代器。
# 迭代完列表中的数据时返回nothing
iterate_ = iter([1,2,3,4,5,6])
a = 6
while a<10:
a +=1
print(next(iterate_,'nothing'))
迭代器只能使用一次,用完了需要重新定义才能开始。
- 5 yield
生成器可以实现迭代功能,只能使用一次,实时生成数据(顾名思义:生成器),不会占用内存。
generator_ = (x*x for x in range(5)) #generator_ 的数据类型是generator
for i in generator_ :
print(i)
def createGenerator():
for i in range(3):
yield i*2
mygenerator = createGenerator()
# mygenerator 只能使用一次,迭代完了就不能用了,不过可以通过调用createGenerator再生成一个生成器。
for i in mygenerator:
print(i)
数据量少的时候或者一般数据分析场景可能不需要用,数据量多需考虑内存或者返回一些值时可能会用到。
generator function产生的generator与普通的function区别:
1)function 每次都是从第一行开始运行,generator从上一次yield开始的地方运行
2)function 调用一次返回一个(一组)值,generator可以多次返回
3)function 可以被无数次重复调用,一个generator实例在yield最后一个值 或者return之后就不能继续调用了
- 6 lamda
能将复杂的代码用一行搞定
↓
python one online
def function能实现的简单函数lambda也可以实现。
如
def f(string):
for char in string:
if char != 'a' and char != 'A':
return False
return True
等价于
f = lambda string:True in [char in 'Aa' for char in string]
应用时:
f(['S','E','C'])
等于
(lambda string: True in [char in 'Aa' for char in string])(['S','E','C'])
- 7 format
设定格式