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

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值