• Day8 python高级特性-- 迭代 Iteration


    通过for循环来遍历 listtupledict、甚至是字符串,这种遍历被称为迭代。

    相比于C的for循环, Python的for循环抽象成都更好,不仅可以用在list或tuple上,还可以用在其他可迭代对象上。
     
    虽然list有下标(支持 list[0]、list[1] 调用),但是很多其他数据类型是没有下标的(如:dict),但只要是可迭代对象,无论是否有下标,都可以进行迭代。
    举例dict:
            >>> a = {'a':1,'bc':2,'d':3,'1':4,'2':5,'3':6,'4':7,'5':8 }
            >>>
            >>> for i in a:
            ...     print(i)
            ...
            a
            5
            d
            4
            1
            3
            2
            bc
        由于dict的存储不是按照list的方式进行顺序排列,所以迭代的结果顺序可能不同。

    dict迭代:
        默认情况下,dict迭代的是key , 如果要迭代value,可以使用 dictname.value() 的方式来表示value, 如果要同时迭代key和value,可以使用 dictname.items()
    当使用for循环时,只要作用于一个可迭代对象,就可以正常运行,不用太关心该对象究竟是list还是其他数据类型。
     
    下标循环:
        可以引入python内置函数 enumerate , 把一个list变成索引-元素 对, 这样就可以再for循环中同时迭代索引和元素本身了:
                >>> a = ['a','b','c','d','e']
                >>> for inode,value in enumerate(a):
                ...     print(inode,value)
                ...
                0 a
                1 b
                2 c
                3 d
                4 e
     
    for循环里引入多个变量:
                >>> a = [(1,2),(3,4),(5,6),(7,8)]
                >>> for i,j in a:
                ...     print(i,j)
                ...
                1 2
                3 4
                5 6
                7 8
        不过如果不加小括号, 就报错了。(后续学习找答案)
        使用一个变量时:
                >>> a = [(1,2),(3,4),(5,6),(7,8)]
                >>> a[0]
                (1, 2)
                >>> for i in a:
                ...     print(i)
                ...
                (1, 2)
                (3, 4)
                (5, 6)
                (7, 8)
            期待后续学习过程中能搞懂二者各自适合在哪里。

    附加:
        判断一个对象是否可迭代:通过collections模块的iterable类型。
       
    >>> from collections import Iterable
    >>> isinstance('abc', Iterable) # str是否可迭代
    True
    >>> isinstance([1,2,3], Iterable) # list是否可迭代
    True
    >>> isinstance(123, Iterable) # 整数是否可迭代
    False

    练习: 用迭代查找list中最小值和最大值:
    def findMinAndMax(L):
        if len(L) == 0:
            return (None, None)
        else:
            max = L[0]
            min = L[0]
            for i in L:
                if  i > max:
                    max = i
                elif i < min:
                    min = i
            return (min, max)
    #验证
    if findMinAndMax([]) != (None, None):
        print('测试失败1!')
    elif findMinAndMax([7]) != (7, 7):
        print('测试失败2!')
    elif findMinAndMax([7, 1]) != (1, 7):
        print('测试失败3!')
    elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
        print('测试失败4!')
    else:
        print('测试成功5!')
  • 相关阅读:
    嗅探对方机器,获取机器键盘记录
    python识别图片生成字符模式
    栈 详解
    解决 No result defined for action and result input 异常
    解决hibernate保存数据到mysql中出现乱码问题
    懒加载异常 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
    解决springjava.lang.IllegalStateException: BeanFactory not initialized or already closed
    Android Fragment 详解
    脏读|不可重复度|幻读的理解以及Spring定义的五种事务隔离级别
    Spring中的context:annotation-config作用
  • 原文地址:https://www.cnblogs.com/konggg/p/9070950.html
Copyright © 2020-2023  润新知