暑期实训第五天课---迭代器、生成器

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 
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页