自定义迭代器:比如输入奇数项,反向迭代等

有时需要自定义一个迭代模式,如以0.5的步长迭代,或者只输出奇数项,反向迭代等

所谓的迭代器其实也是使用了next方法,所以,只要 合理利用next,就可以达到目的:

#!/usr/bin/env python
#coding:utf-8
#@Author:Andy
#Date: 2017/6/13

def frange(start, stop, step):
	"""
	Use yield to set a new iteration pattern such as float iterate
	you can set start=0, and the step you want
	"""
	x = start
	while x < stop:
		yield x
		x += step

if __name__ == ‘__main__‘:
	for i in frange(0, 10, 0.5):
		print(i, end=‘ ‘)
		# 0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5

def impar_range(start, stop):
	"""
	yield impart index of a iterable
	"""
	i = start
	while i < stop:
		yield i
		i += 2
for i in impar_range(1, 20):
	print(i, end=‘ ‘)
	# 1 3 5 7 9 11 13 15 17 19

def count_down(n):
	"""
	count down from n to 0
	"""
	i = n
	while 0 < i <= n:
		yield i
		i -= 1

for i in count_down(10):
	print(i, end = ‘ ‘)
	# 10 9 8 7 6 5 4 3 2 1
时间: 2024-10-18 06:44:01

自定义迭代器:比如输入奇数项,反向迭代等的相关文章

Python迭代和解析(4):自定义迭代器

本文介绍如何自定义迭代器,涉及到类的运算符重载,包括__getitem__的索引迭代,以及__iter__.__next__和__contains__,如果不了解这些知识可跳过本文. 索引迭代方式 索引取值和分片取值 元组.列表.字典.集合.字符串都支持索引取值操作和分片操作. >>> L = [11,21,31,41] >>> L[0] 11 >>> L[0:2] [11, 21] 分片操作实际上将一个slice对象当作索引位传递给序列,然后以索引取

【笔记】反向迭代

实现一个连续浮点数发生器FloatRange,产生一些连续浮点数. 实现反向迭代协议的__reversed__方法,它返回一个迭代器. 1 class FloatRange: 2 def __init__(self,start,end,step = 0.1): 3 self.start = start 4 self.end = end 5 self.step = step 6 7 def __iter__(self): 8 t = self.start 9 while t <= self.end

列表正向迭代、反向迭代要注意的问题

一.列表正向迭代取值 代码如下: 执行结果: i的取值为:0,1,2,3 二.反向迭代取值 代码如下: 执行结果: i的取值为:4.3.2.1

Apex 中的自定义迭代器

迭代器 迭代器(iterator)可以遍历一个集合变量中的每个元素.Apex提供了Iterator接口来让开发者实现自定义的迭代器. Iterator接口 Iterator接口定义了两个函数: hasNext():返回Boolean类型,表示被遍历的集合变量中是否还有下一个元素 next():返回集合变量中要被遍历的下一个元素 实现Iterator接口的类中所有的函数必须是global或public的. 示例代码(摘录自官方文档): global class CustomIterable imp

python自定义迭代器对象以及可迭代对象

# coding=utf8 from collections import Iterator from collections import Iterable #迭代器对象 class OwnIteror( Iterator ): def __init__(self , arrs ): self.index = 0 self.arrs = arrs def next(self): if self.index > len( self.arrs ) - 1: raise StopIteration

lua自定义迭代器

迭代器 http://www.tutorialspoint.com/lua/lua_iterators.htm 迭代器能够让你遍历某个集合或者容器中的每一个元素. 对于lua来说, 集合通常指代 table, 用于创建变化的数据结构, 类似数组. Iterator is a construct that enables you to traverse through the elements of the so called collection or container. In Lua, th

迭代器、生成器、可迭代对象

1.如果一个对象同时含有__iter__()方法和next()方法,那他就是一个迭代器 2.只含有__iter__()方法,并且该方法返回一个迭代器,那他就是一个可迭代对象 3.只有next方法,啥都不是.但是可以直接用next(obj)调用该对象.next(obj)方法的本质就是调用obj对象的next()方法,无论obj对象是否为迭代器 举例来说,Python的list数据类型: print dir([1,2,3]) >> ['__add__', '__class__', '__conta

【C++】输入并反向输出字符串

<pre name="code" class="cpp">// 反向输出字符串 #include<iostream> #include<string.h> using namespace std; void f(char p[]); int main() { char s[50]; cout<<"请输入一个字符串: "; cin>>s; f(s); cout<<"反

Java 经典实例:自定义迭代器

编写自己的Iterator,实现Iterator接口,这里多说一句,实现Iterable后,可以用"foreach"循环遍历你的对象. import java.util.Iterator; import java.util.NoSuchElementException; /** * 演示Iterator和Iterable接口,并说明怎样编写一个用于对象数组的简单迭代器. */ public class AarrayIterator<T> implements Iterabl