zoukankan      html  css  js  c++  java
  • 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!')
  • 相关阅读:
    Socket.IO 客户端 API IO
    约束,在ios8 没问题,在ios7崩溃的问题,UItextField
    在Viewdidload里面给self.View加动画无效的问题
    改变UITextField PlaceHolder的字体和颜色,不影响正常输入
    iOS第三方键盘高度获取不准确问题
    tableViewCell的分割线短一截的问题
    iOS开发中模拟器归档成功,但是真机归档失败的问题
    C语言——数组、字符串
    C语言——函数
    C语言——流程控制
  • 原文地址:https://www.cnblogs.com/konggg/p/9070950.html
Copyright © 2011-2022 走看看