• python学习第八天 -- 迭代


    什么是迭代?

    在python语言中,迭代的意思就是通过for循环遍历一个有序/无序的集合。

    迭代是通过 for x in 集合 来完成的。

    前面有提到python中有哪些集合,现在我们来梳理一下:

    (1)有序集合:list ,tuple,str 和unicode。

    (2)无序集合:set

    (3)无序集合并且具有key-value对应关系:dict

    直接举个代码例子:

    for循环迭代数列 1-10并打印出5的倍数。
    >>> L = range(1,11)
    >>> for number in L:
    ...     if number % 5 == 0:
    ...         print number
    ...
    5
    10

    索引迭代

    前面已经有讲过List的用法,可以直接通过索引去到List的元素。但是有时候也要取得索引的值,如何取得?

    python针对List提供了 enumerate() 函数。

    直接举个代码例子:

    >>> L = ['zhangsan','lixi','wangwu']
    >>> for index,people in enumerate(L):
    ...     print index,':',people
    ...
    0 : zhangsan
    1 : lixi
    2 : wangwu

    解析:enumerate函数是将['zhangsan','lixi','wangwu']变化成了一个tuple类型。

    ['zhangsan','lixi','wangwu']
    变成了
    [(0,'zhangsan'),(1,'lixi'),(2,'wangwu')]

    所以实际上每一个迭代返回都是一个tuple类型。用如下代码证明:

    >>> L = ['zhangsan','lixi','wangwu']
    >>> for t in enumerate(L):
            index = t[0]
            people = t[1]
    ...     print index,':',people
    ...
    0 : zhangsan
    1 : lixi
    2 : wangwu

    补充:介绍zip()函数:

    zip()函数可以把两个 list 变成一个 list:

    >>> zip([10, 20, 30], ['A', 'B', 'C'])
    [(10, 'A'), (20, 'B'), (30, 'C')]

    任务:

    在迭代 ['A', 'B', 'C', 'D'] 时,如果我们想打印出顺序 - 字母(名次从1开始),请考虑如何在迭代中打印出来。提示:考虑使用zip()函数和range()函数

    L = ['A', 'B', 'C', 'D']
    for index, name in zip(range(1,len(L)+1),L):
        print index, '-', name

    迭代dict

    之前内容有提过 ,dict是一个无序并且带key-value的集合。可以通过索引取得key值。但是怎样取得key对应的value值呢?

    dict对象有一个values()方法,可以把dict转换为一个带value元素的list。

    >>> d={'zhangsan':45,'lixi':56,'wangwu':90}
    >>> for va in d.values():
    ...     print 'score:',va
    ...
    score: 56
    score: 45
    score: 90

    PS:在一些教程中有提过 itervalues()函数,但是这个函数在python 3.x版本已经抛弃使用了。不在这里过多讲解。


    如果要同时取得key 和value的值,如果迭代取得?

    dict对象有一个items()方法,可以把dict对象转换成了包含tuple的list。

    //取得平均分
    >>>d = { 'zhangsan': 95, 'lixi': 85, 'wangwu': 59}
    
    >>>sum = 0.0
    >>>for name, v in d.items():
    ....    sum = sum + v
    ....    print name,':',v
    print 'average', ':', sum/len(d)

    小结:python的一些集合对象迭代的在一些地方还是比较实用的,但是python 3.x有些attribute抛弃了。大家可以参考python 3.x用户使用文档,就不在这里一一列出。

  • 相关阅读:
    Mysql学习总结(19)——Mysql无法创建外键的原因
    Java Web学习总结(21)——http协议响应状态码大全以及常用状态码
    Java Web学习总结(21)——http协议响应状态码大全以及常用状态码
    Tomcat学习总结(5)——Tomcat容器管理安全的几种验证方式
    Android学习总结(1)——好的 Android 开发习惯
    phabricator
    linux-kernel 学习计划
    【华为云技术分享】Linux内核编程环境 (1)
    7 分钟全面了解位运算
    【华为云技术分享】鲲鹏弹性云服务器GCC交叉编译环境搭建指南
  • 原文地址:https://www.cnblogs.com/nx520zj/p/5688087.html
Copyright © 2020-2023  润新知