readline() 把文章内容全部读取,或者读取指定字节个数的文件内容
readline():读取一行文件内容
readlines():读取所有文件内容,返回一个列表,每一行作为列表中的一个元素
map : 按指定规则对序列进行映射。参数一:表示规则的函数 参数二,参数三:表示要被映射的序列
filter:按指定规则对序列中的元素进行过滤
reduce :指按指定的规则对序列中的元素进行累计运算
例题2.读取指定的文件,并使用 split() 函数以空白为字符串分隔得到文件中所有的单词。
完成一个名为 mimic_dict 的函数:
以出现在文件中的单词(全都小写化)为键(key),文件中所有紧跟在单词后面的一个单词组成的列表为值(value)。
单词列表可以是任意顺序的,也可以包含重复的值。
例如,键“and”可能有列表[“then”, “best”, “then”, “after”, …],
此列表包括了所有的文件中在’and’后面的单词。
核心代码:
Zip的使用,将两个列表,按照索引的顺序组合起来
word1 = words[:-1] #将words里单词从第一个到倒数第二个,不包含最后一个
word2 = words[1:] #第二个到最后一个单词
for word in zip(word1,word2):
def mimic_dict(file_name):
'''
1.读取文件内容
2.把文件内容中的字符串按空格进行切分
3.统计每个单词后面紧跟单词列表
:param file_name:
:return:
'''
with open(file_name)as file:
content = file.read()
content = content.replace('.\n'," ")
words = content.split(" ")
word1 = words[:-1]
word2 = words[1:]
word_context_dict = {}
#zip函数作用是组合两个列表,上下一一对应
for word in zip(word1,word2):
#word 是一个元组,第一个元素是word1里的元素,第二个元素是第一个元素紧跟的单词
if word[0] in word_context_dict.keys():
word_context_dict[word[0]].append(word[1])
else:
word_context_dict[word[0]] = [word[1]]
return word_context_dict
print(mimic_dict("zen.txt"))
迭代器
这里插播一下 for …each 和 while 本质是同样的原理
使用For循环:
string = "zengzijian"
it = iter(string)
for each in string:
print(each)
使用while :
while True:
try:
each = next(it)
except StopIteration:
break
print(each)
打印出来都是:
z
e
n
g
z
i
j
i
a
n
iter 和 next 都对应着魔法变量:
__iter__ 和 __next__
斐波拉契数列;
精髓代码:
self.a,self.b = self.b,self.a+self.b
所有代码
class fibs:
def __init__(self):
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
self.a,self.b = self.b,self.a+self.b
return self.a
测试代码
l = fibs()
for each in l :
if each < 100:
print(each)
else:
break
生成器 yield
协同程序:就是运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始
def libs():
a = 0
b = 1
while True:
a,b = b,a+b
yield a
for each in libs():
if each < 100:
print (each,end=" ")
else:
break
打印结果:
1 1 2 3 5 8 13 21 34 55 89