8、如何实现可迭代对象和迭代器对象

PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错

from collections import Iterator,Iterable
import requests,json class WeatherItertor(Iterator):
def __init__(self,city_list):
self.CityList = city_list
self.indexA = 0 def getWeather(self,city):
r = requests.get('http://www.weather.com.cn/data/sk/{code}.html'.format(code=city))
ret = json.loads(r.content.decode("utf-8"))
#风向
WD = ret["weatherinfo"]["WD"]
#城市
city_data = ret["weatherinfo"]["city"]
return "城市:{city},风向:{WD}".format(city=city_data,WD=WD) def __next__(self):
if self.indexA == len(self.CityList):
raise StopIteration
city = self.CityList[self.indexA]
self.indexA += 1
return self.getWeather(city) class WeatherIterable(Iterable):
def __init__(self,city_list):
self.CityList =city_list def __iter__(self):
return WeatherItertor(self.CityList) # citys = {'北京':101010100,'朝阳':101010300,'顺义':101010400,'怀柔':101010500}
citys_list = [101010100,101010300,101010400,101010500]
ret = WeatherIterable(citys_list) for x in ret:
print(x) result:

C:\Python35-32\python.exe C:/laoni/PycharmProjects/TEXT/aa.py
城市:北京,风向:东南风
城市:朝阳,风向:南风
城市:顺义,风向:南风
城市:怀柔,风向:西南风

9、如何使用生成器函数实现可迭代对象

函数里有yield关键是,则是生成器,生成器内置有__iter__方法,只不过调用__iter__返回的是生成器本身,利用这一特性,可以创建一个可迭代对象的类。

class PrimeNum():
def __init__(self,start,end):
self.start = start
self.end = end def aa_bb(self,x):
if x % 2 ==0:
ret = "这是一个偶数:{info}".format(info=x)
elif x % 2 !=0:
ret = "这是一个奇数:{info}".format(info=x)
else:
pass
return ret def __iter__(self):
for x in range(self.start,self.end):
p = self.aa_bb(x)
yield p for x in PrimeNum(1,8):
print(x) result:
这是一个奇数:1
这是一个偶数:2
这是一个奇数:3
这是一个偶数:4
这是一个奇数:5
这是一个偶数:6
这是一个奇数:7

10、如何进行反向迭代以及如何实现反向迭代

正向的可以使用iter函数获取正向的迭代器,reversed函数可以获取反向的迭代器,使用reversed的前提是对象本身具有__reversed__方法

class FloatRange():
def __init__(self,start,end,step=0.2):
self.start =start
self.end = end
self.step = step def __iter__(self):
t = self.start
while t <= self.end:
yield t
t += self.step def __reversed__(self):
t = self.end
while t >= self.start:
yield t
t -= self.step for x in reversed(FloatRange(1,4)):
print(x) 结果:
4
3.8
3.5999999999999996
3.3999999999999995
3.1999999999999993
2.999999999999999
2.799999999999999
2.5999999999999988
2.3999999999999986
2.1999999999999984
1.9999999999999984
1.7999999999999985
1.5999999999999985
1.3999999999999986
1.1999999999999986

11、如何对迭代器做切片操作

通过readlines方法可以获取到,

f = open('H2','r')
print(f)
ret = f.readlines()
print(ret[1:3]) result:
<_io.TextIOWrapper name='H2' mode='r' encoding='cp936'>
[' log 127.0.0.1 local2\n', ' daemon\n']

使用itertools.islice

from itertools import islice

f = open('H2','r')
#获取第10到第20行
info = islice(f,10,20)
print(info)
for x in info:
print(x)
#获取开始到第二十行
info2 = islice(f,30)
#获取第四十行到结尾
info3 = islice(f,40,None) retsult: <itertools.islice object at 0x01803F00>
timeout server 50000ms option dontlognull listen scats :8888 stats enable stats uri /admin stats auth admin:1234 frontend oldboy.org bind 0.0.0.0:80 option httplog

12、如何在一个for语句中迭代多个可迭代对象

from random import randint
from itertools import chain #并行
Chinese = [randint(40,100) for x in range(10)]
Math = [randint(50,100) for x in range(10)]
English = [randint(60,100) for x in range(10)]
print(Chinese,Math,English)
result = []
for C,M,E in zip(Chinese,Math,English):
ret = C + M + E
result.append(ret) print(result) #串行
class_one = [randint(40,100) for x in range(6)]
class_two = [randint(50,100) for x in range(8)]
class_three = [randint(60,100) for x in range(9)]
chin = 0
for x in chain(class_one,class_two,class_three):
if x >= 90:
chin += 1 print(chin)

8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象的更多相关文章

  1. python迭代-如何对迭代器做切片操作

    如何对迭代器做切片操作 问题举例 读取某个文件内容的100~300行内容,我们是否可以使用 类似列表切片的方式得到一个100~300行文件内容的生成器 分析 列表的切片操作其实是在重载方法__getI ...

  2. python迭代-如何在一个for语句中迭代多个可迭代对象

    如何在一个for语句中迭代多个可迭代对象 问题举例 (1)某班学生期末考试成绩,语文,数学,英语分别存储在3个列表中,同时迭代三个列表,计算每个学生的总分 (2)某年级有4个班,某次考试每班英语成绩分 ...

  3. 如何在一个for语句中迭代多个对象(2.7)

    如何在一个for语句中迭代多个对象 总结: 并行迭代使用zip(l1, l2, l3) 每次迭代从3个列表里各取一个数据 串行迭代使用itertools.chain(l1, l2, l3) 相当于把3 ...

  4. 3-6如何在一个for语句中迭代多个可迭代对象

    1.并行迭代 迭代元组可以进行拆包迭代. >>> zip([1,2,3,4],('a','b','c','d')) [(1, 'a'), (2, 'b'), (3, 'c'), (4 ...

  5. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  6. 理解SQL Server中的权限体系(下)----安全对象和权限

    原文:http://www.cnblogs.com/CareySon/archive/2012/04/12/SQL-Security-SecurableAndPermission.html 在开始阅读 ...

  7. SQL学习笔记四(补充-1-1)之MySQL单表查询补充部分:SQL逻辑查询语句执行顺序

    阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...

  8. SQL语句中的select高级用法

    #转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...

  9. 如何剔掉 sql 语句中的尾巴,我用 C# 苦思了五种办法

    一:背景 1. 讲故事 这几天都在修复bug真的太忙了,期间也遇到了一个挺有趣bug,和大家分享一下,这是一块sql挺复杂的报表相关业务,不知道哪一位大佬在错综复杂的 嵌套 + 平行 if判断中sql ...

随机推荐

  1. Haproxy+ssl+nvm+forever

    1 nvm介绍 NVM(Node version manager)顾名思义,就是Node.js的版本管理软件,可以轻松的在Node.js各个版本间切换,项目源码在GitHub: #安装git客户端 [ ...

  2. 爬虫(三)—— BeautifulSoup模块获取元素

    目录 BeautifulSoup 一.BeautifulSoup简介 二.安装模块 三.解析器 四.Beautiful Soup的使用 五.查找元素 1.遍历文档树 2.搜索文档树 Beautiful ...

  3. Linux(二)—— Linux配置及指令

    目录 Linux配置及指令 一.linux中常用软件的安装 二.主机名和网络 1.修改主机名 2.设置网络 三.关闭防火墙 1.检查防火墙是否开启 2.清除策略 3.永久关闭第一个防火墙 4.关闭第二 ...

  4. 100个常用js代码(转载)

    作者:小萧ovo链接:https://zhuanlan.zhihu.com/p/23076321来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. JavaScript定点 ...

  5. shell编程:命令替换的运用

    命令替换,有两种方式 方式一:`command` 方式二:$(command) user.sh 查找系统中所有的用户,并且输出 #!/bin/bash nginx=`netstat -tnlp | | ...

  6. linux python2.6升级2.7

    一.升级 Python 2.7.10 版本 1. 准备安装包,系统是最小化安装 # 下载安装依赖的相关包[root@vip ~]# yum install vim gcc make wget -y [ ...

  7. 36-python基础-python3-字典与列表的区别

    (1)不像列表,字典中的表项是不排序的.名为 spam 的列表中,第一个表项是 spam[0].但字典中没有“第一个”表项. (2)确定两个列表是否相同时,表项的顺序必须相同,但在字典确定两个字典是否 ...

  8. 案例:原型 constructor

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 删除DataFrame中特定条件的行/列

    在<Python进行数据分析与挖掘实战>一书中,第10章 删除热水器不工作的数据(水流量为0并且开关机状态为“关”的数据.) import pandas as pd data=pd.rea ...

  10. loj2472[九省联考2018]IIIDX

    题意:要求构造一个d的排列使得满足d[i/k]<=d[u]且字典序最大. 标程(bzoj上并不能过): #include<bits/stdc++.h> #define mid ((l ...