返回顶部
首页 > 资讯 > 后端开发 > Python >Python基础(08):迭代器和解析
  • 861
分享到

Python基础(08):迭代器和解析

2023-06-02 10:06:43 861人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。一、NEXT语法:next(iterator[, default])说明:函数必须接收一个可迭代对象参数,每次调

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

一、NEXT

  • 语法:next(iterator[, default])

  • 说明:

    • 函数必须接收一个可迭代对象参数,每次调用的时候,返回可迭代对象的下一个元素。如果所有元素均已经返回过,则抛出StopIteration 异常。

      >>> a = iter('abcd')>>> next(a)'a'>>> next(a)'b'>>> next(a)'c'>>> next(a)'d'
    • 函数可以接收一个可选的default参数,传入default参数后,如果可迭代对象还有元素没有返回,则依次返回其元素值,如果所有元素已经返回,则返回default指定的默认值而不抛出StopIteration 异常。

      a = iter('abcd')>>> next(a,'e')'a'>>> next(a,'e')'b'>>> next(a,'e')'c'>>> next(a,'e')'d'>>> next(a,'e')'e'>>> next(a,'e')'e'

二、iter

  • 语法:iter(object[, sentinel])

  • 说明:

    • 函数功能返回一个可迭代对象。

    • 当第二个参数不提供时,第一个参数必须是一个支持可迭代协议(即实现了__iter__()方法)的集合(字典、集合、不可变集合),或者支持序列协议(即实现了__getitem__()方法,方法接收一个从0开始的整数参数)的序列(元组、列表、字符串),否则将报错。

      >>> a = iter({'A':1,'B':2}) #字典集合>>> a<dict_keyiterator object at 0x03FB8A50>>>> next(a)'A'>>> next(a)'B' >>> a = iter('abcd') #字符串序列>>> a<str_iterator object at 0x03FB4FB0>>>> next(a)'a'>>> next(a)'b'>>> next(a)'c'>>> next(a)'d'
    • 当第二个参数sentinel提供时,第一个参数必须是一个可被调用对象。创建的迭代对象,在调用__next__方法的时候会调用这个可被调用对象,当返回值和sentinel值相等时,将抛出StopIteration异常, 终止迭代。

      >>> class IterTest:    def __init__(self):        self.start = 0        self.end = 10    def get_next_value(self):        current = self.start        if current < self.end:            self.start += 1        else:            raise StopIteration        return current        >>> iterTest = IterTest() #实例化类>>> a = iter(iterTest.get_next_value,4) # iterTest.get_next_value为可调用对象,sentinel值为4>>> a<callable_iterator object at 0x03078D30>>>> next(a)>>> next(a)1>>> next(a)2>>> next(a)3

三、RANGE

  • 语法:range(start, stop[, step])

  • 说明:

    • range函数用于生成一个range对象,range类型是一个表示整数范围的类型。

    • 可以直接传入一个结束整数来初始化一个range类型,默认起始值为0(包含0).结束整数可以大于0,也可以小于等于0,但是小于等于0的时候生成的range对象实际是不包含任何元素的。

      >>> a = range(5)>>> arange(0, 5)>>> len(a)5>>> for x in a:print(x) 1234 >>> b = range(0) # 传入0,空range对象>>> len(b) >>> c = range(-5)  # 传入负数,空range对象>>> len(c)
    • 可以传入一个起始整数和一个结束整数来初始化一个range类型,生成的range类型包含起始整数(包含),和结束整数(不包含)之间的所有整数。

      >>> a = range(1,5)>>> arange(1, 5)>>> for x in a:print(x)1234
    • 传入了起始整数和结束整数,还可以同时传入一个步进值来初始化一个range类型,生成的range类型包含起始整数(包含),和结束整数(不包含)之间的以步进值筛选后的整数。

      >>> a = range(1,10,3)>>> arange(1, 10, 3)>>> for x in a:print(x)147
    • 初始化range类型时起始整数和结束整数,遵循的是左臂右开原则,即包含起始整数,但不包含结束整数。

      >>> a = range(1,5)>>> arange(1, 5)>>> for x in a:print(x) # 包含1,不包含5 1234
    • range接收的参数都必须是整数,不能是浮点数等其它数据类型。

    • range实际上是一个不可变的序列类型,可以对它进行取元素、切片等序列操作,但是不能对其中元素修改值。

      >>> a = range(1,5) >>> a[0] # 取元素1>>> a[:-2] # 切片range(1, 3)>>> a[1] = 2 # 修改元素值Traceback (most recent call last):  File "<pyshell#38>", line 1, in <module>    a[1] = 2TypeError: 'range' object does not support item assignment

四、MAP

  • 语法:map(function, iterable, ...)

  • 说明:

    • 函数接受一个函数类型参数、一个或者多个可迭代对象参数,返回一个可迭代器,此迭代器中每个元素,均是函数参数实例调用可迭代对象后的结果。

      >>> a = map(ord,'abcd')>>> a<map object at 0x03994E50>>>> list(a)[97, 98, 99, 100]
    • 当传入多个可迭代对象时,函数的参数必须提供足够多的参数,保证每个可迭代对象同一索引的值均能正确传入函数。

      >>> a = map(ord,'abcd','efg') # 传入两个可迭代对象,所以传入的函数必须能接收2个参数,ord不能接收2个参数,所以报错>>> list(a)Traceback (most recent call last):  File "<pyshell#22>", line 1, in <module>    list(a)TypeError: ord() takes exactly one argument (2 given)
    • 当传入多个可迭代对象时,且它们元素长度不一致时,生成的迭代器只到最短长度。

      >>> def f(a,b):    return a + b    >>> a = map(f,'abcd','efg') # 选取最短长度为3>>> list(a)['ae', 'bf', 'cg']map函数是一个典型的函数式编程例子。

五、ZIP

  • 语法:zip(*iterables)

  • 说明:

    • 函数功能是聚合传入的每个迭代器中相同位置的元素,返回一个新的元组类型迭代器。

      >>> x = [1,2,3]>>> y = [4,5,6]>>> xy = zip(x,y)>>> xy #xy的类型是zip类型<zip object at 0x0429C828>#导入Iterable>>> from collections import Iterable>>> isinstance(xy,Iterable) #判断是否可迭代对象True>>> list(xy) #结果[(1, 4), (2, 5), (3, 6)]
    • 如果传入的迭代器长度不一致,最短长度的迭代器迭代结束后停止聚合。

      >>> x = [1,2,3] #长度3>>> y = [4,5,6,7,8] #长度5>>> list(zip(x,y)) # 取最小长度3[(1, 4), (2, 5), (3, 6)]
    • 如果只传入一个迭代器,则返回的单个元素元组的迭代器。

      >>> list(zip([1,2,3]))[(1,), (2,), (3,)]
    • 如果不传入参数,则返回空的迭代器。

      >>> list(zip())[]
    • zip(*[iter(s)]*n)等效于调用zip(iter(s),iter(s),...,iter(s))。

      >>> x = [1,2,3] >>> list(zip(*[x]*3))[(1, 1, 1), (2, 2, 2), (3, 3, 3)] >>> list(zip(x,x,x))[(1, 1, 1), (2, 2, 2), (3, 3, 3)]

六、FILTER

  • 语法:filter(function, iterable)

  • 说明:

    • filter函数用于过滤序列。过滤的方式则是采用传入的函数,去循环序列的元素调用,如果函数计算的结果为True则保留元素,否则将舍弃该元素。

      >>> a = list(range(1,10)) #定义序列>>> a[1, 2, 3, 4, 5, 6, 7, 8, 9]>>> def if_odd(x): #定义奇数判断函数    return x%2==1    >>> list(filter(if_odd,a)) #筛选序列中的奇数[1, 3, 5, 7, 9]
    • 当function参数传入None时,序列中的元素值如果为False,也会自动舍弃。

      >>> c = ['',False,'I',{}] #定义序列>>> c['', False, 'I', {}] >>> list(filter(None,c)) #筛选函数为None,自动舍弃序列中的False值,空字符串、False值、空序列都是False值,所以丢弃['I']

七、LIST类型迭代

>>> L = [1,2,3,4,5]>>> for i in range(len(L)):>>>    L[i] += 10>>> print(L)[11, 12, 13, 14, 15]>>> L = [x + 10 for x in L]>>> print(L)[21, 22, 23, 24, 25]

八、DICT类型迭代

>>> D = dict(a=1, b=2, ,c=3)>>> for k in sorted(D): print(k, D[k], end=' ')1 2 3

--结束END--

本文标题: Python基础(08):迭代器和解析

本文链接: https://lsjlt.com/news/229659.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python基础(08):迭代器和解析
    迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。一、NEXT语法:next(iterator[, default])说明:函数必须接收一个可迭代对象参数,每次调...
    99+
    2023-06-02
  • Python基础入门(迭代器和生成器)
    1 Python迭代器 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next(),且字符串、列表或元组对象...
    99+
    2023-01-30
    生成器 入门 迭代
  • python基础:迭代器与生成器
    一、迭代器 迭代器只能向前访问,不能后退字典,列表,元组,字符串,range都是可以迭代的对象。 1、创建迭代器 `dict={1:3,2:4,3:5,4:6}key = iter(dict)print(key)print(next(key...
    99+
    2023-01-31
    生成器 迭代 基础
  • Python迭代和解析(2):迭代初探
    解析、迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html 在Python中支持两种循环格式:while和for。这两种循环的类型不同: while是通过条件判断的真...
    99+
    2023-01-30
    迭代 Python
  • Python迭代和迭代器详解
    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节。 摘自维...
    99+
    2022-06-04
    迭代 详解 Python
  • 详解Python迭代和迭代器
    我们将要来学习python的重要概念迭代和迭代器,通过简单实用的例子如列表迭代器和xrange。 可迭代 一个对象,物理或者虚拟存储的序列。list,tuple,strins,dicttionary,set...
    99+
    2022-06-04
    迭代 详解 Python
  • python基础之迭代器与生成器
    目录1. 迭代器1.1 迭代器的使用1.2 创建类的迭代器2. 生成器2.1 生成器的使用2.2 生成器表达式总结 1. 迭代器 1.1 迭代器的使用 迭代器对象从集合的第一个元素开...
    99+
    2024-04-02
  • Python迭代和解析(4):自定义迭代
    解析、迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html 本文介绍如何自定义迭代器,涉及到类的运算符重载,包括__getitem__的索引迭代,以及__iter__、...
    99+
    2023-01-30
    迭代 自定义 Python
  • 【Java 基础篇】Java 迭代器详解
    文章目录 导言一、迭代器的概念二、使用迭代器三、迭代器的优势四、迭代器的常见技巧1. 使用增强的 for 循环2. 遍历过程中的修改3. 避免重复创建迭代器4. 使用迭代器的限制功能 五、示例代码总结 导言 在 Jav...
    99+
    2023-08-18
    java python 开发语言
  • python迭代和解析(3):range
    解析、迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html range range()是一个内置函数,它返回一个数字序列,功能和Linux下的seq命令差不多。 >...
    99+
    2023-01-30
    迭代 python range
  • Python 迭代器、生成器和列表解析
    迭代器 迭代器在 Python 2.2 版本中被加入, 它为类序列对象提供了一个类序列的接口。 Python 的迭代无缝地支持序列对象, 而且它还允许迭代非序列类型, 包括用户定义的对象。即迭代器可以迭代不是序列但表现出序列行为的对象, ...
    99+
    2023-01-31
    生成器 迭代 列表
  • Python中迭代和迭代器是什么
    本篇文章给大家分享的是有关Python中迭代和迭代器是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。可迭代一个对象,物理或者虚拟存储的序列。list,tuple,strin...
    99+
    2023-06-17
  • 详解Python之可迭代对象,迭代器和生成器
    目录一、概念描述二、序列的可迭代性三、经典的迭代器模式四、生成器也是迭代器五、实现惰性迭代器六、使用生成器表达式简化惰性迭代器总结 一、概念描述 可迭代对象就是可以迭代的对象,我们可...
    99+
    2024-04-02
  • 怎样理解Python迭代对象和迭代器以及生成器
    这篇文章将为大家详细讲解有关怎样理解Python迭代对象和迭代器以及生成器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在了解Python的数据结构时,容器(container)、可迭代对象...
    99+
    2023-06-17
  • Javascript的迭代器和迭代接口详解
    目录1,什么是迭代器2,自定义迭代接口3,原生语言的迭代总结1,什么是迭代器 每一个可迭代对象都对应着一个可迭代接口[Symbol.iterator]; [Symbol.iterat...
    99+
    2024-04-02
  • python迭代器和生成器
    1.经典迭代器 import re RE_WORD = re.compile('\w+') class Sentence: def __init__(self, text): self.text = te...
    99+
    2023-01-30
    生成器 迭代 python
  • python yield迭代器详解
    目录一、yield迭代器二、使用步骤1.引入库2.读入数据总结一、yield迭代器 在python深度学习模型读取数据时,经常遇到yield,互联网搜索后,将比较容易理解的说明记录一...
    99+
    2022-11-13
    python yield python yield迭代器
  • ​​​​​​​python可迭代对象,迭代器,生成器,协程实例分析
    这篇文章主要介绍了python可迭代对象,迭代器,生成器,协程实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python可迭代对象,迭代器,生成器,协程实例分析文章都会有所收获,下面我们一起来看看吧。设...
    99+
    2023-06-30
  • Python浅析迭代器Iterator的使用
    目录前言迭代器是什么自定义迭代器前言 当我们需要对列表(list)、元组(tuple)、字典(dictionary)和集合(set)的元素进行遍历时,其实Python内部都是启动迭代...
    99+
    2024-04-02
  • python迭代器,生成器详解
    目录迭代器 生成器 总结迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作