• Python中使用 for 循环来拿遍历 List 的值


    常规版本

    简单的 for 循环遍历

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    er-hljs
    x_n = ["x1","x2","x3"] for x in x_n: print(x) >> x1 x2 x3

    借助 range() 和 len()

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    er-hljs
    x_n = ["x1","x2","x3"] for i in range(len(x_n)): print(x_n[i]) >> x1 x2 x3

    借助 enumerate()

    enumerate() 是 python 的内置函数,表示枚举的意思,其处理的是可迭代或者可遍历对象(列表,字符串等),可以同时获得 值 和 其在对象中的索引号

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    er-hljs
    x_n = ["x1","x2","x3"] for i,x in enumerate(x_n): print(i,x) >> (0, 'x1') (1, 'x2') (2, 'x3')

    借助 iter()

    iter() 的参数必须是一个可迭代或者可遍历对象,这与enumerate() 一致,iter() 返回的是迭代器

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    er-hljs
    x_n = ["x1","x2","x3"] for x in iter(x_n): print(x) print(type(x_n)) print(type(iter(x_n))) >> x1 x2 x3 >> <type 'list'> >> <type 'listiterator'>

    由于 iter() 可以构成迭代器对象的迭代器,其可以使用 next() 函数 来获取迭代器的下一条数据

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    er-hljs
    x_n = ["x1","x2","x3"] x_i = iter(x_n) for x in range(len(x_n)): print(next(x_i)) >> x1 x2 x3

    简便版本(在 list 内部使用 for 循环)

    简单嵌入

    一行代码就可以实现循环功能

    复制代码
    • 1
    er-hljs
    my_list = [表达式 for 循环项 in 循环体 ]

    例子:

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    er-hljs
    import math x_n = "Hello World" y_n = [1,2,3] my_listx = [n for n in x_n] my_listy = [math.pow(n,2) for n in y_n] # 调用math库的pow求幂 my_listy_1 = [pow(n,2) for n in y_n] # 调用python内置的pow求幂 print(my_listx) print(my_listy) print(my_listy_1) >> ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'] >> [1.0, 4.0, 9.0] >> [1, 4, 9]

    tips: math库的 pow() 输入为 float 型,若输入为整型(int)则自动转换为 float,输出结果也为 float;python 内置的pow() 输入为整型,输出为整型,输入为float,输出也为float

    加入条件

    在循环中使用条件判断(在for循环的后面加或者前面加),以筛选出合适的数据

    复制代码
    • 1
    er-hljs
    my_list = [表达式 for 循环项 in 循环体 if 条件]

    或者有第二种形式:

    复制代码
    • 1
    er-hljs
    my_list = [表达式1 if 条件 else 表达式2 for 循环项 in 循环体]

    此时 if 必须要和 else 搭配,不然会报错;且当 if 条件为真, 结果为表达式1,否者结果为 表达式2

    例子:

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    er-hljs
    import math x_n = ["Hello World", "No good", "Good thing"] y_n = [1,2,3,4] my_listx = [n for n in x_n if n.startswith("Hello")] my_listy = [math.pow(n,2) for n in y_n if n > 1] print(my_listx) print(my_listy) >> ['Hello World'] >> [4.0, 9.0, 16.0] ------------------------------------------- ## 第二种形式 ## import math x_n = ["Hello World", "No good", "Good thing"] y_n = [1,2,3,4] my_listx = [n if n.startswith("Hello") else "No print" for n in x_n] my_listy = [math.pow(n,2) if n > 2 else math.pow(n,3) for n in y_n] print(my_listx) print(my_listy) >> ['Hello World', 'No print', 'No print'] >> [1.0, 8.0, 9.0, 16.0]
    折叠

    嵌套循环

    与普通的for循环类似,list中也可以嵌套for循环来达到目的

    复制代码
    • 1
    er-hljs
    my_list = [表达式 for 循环项1 in 循环体 for 循环项 in 循环项1]

    其中第一个循环为最外层循环,后面的循环为内层循环,最后表达式的结果和次数都是按照最后一个循环内来计算的

    例子:

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    er-hljs
    x_n = ["Hello", "World"] my_listx = [n for name in x_n for n in name] my_listy = [name for name in x_n for n in name] print(my_listx) print(my_listy) >> ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'] >> ['Hello', 'Hello', 'Hello', 'Hello', 'Hello', 'World', 'World', 'World', 'World', 'World'] -------------------------------- ## 上面的和下面的一样的效果 ## my_list1 = [] my_list2 = [] for name in x_n: for n in name: my_list1.append(n) my_list2.append(name) print(my_list1) print(my_list2) >> ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'] >> ['Hello', 'Hello', 'Hello', 'Hello', 'Hello', 'World', 'World', 'World', 'World', 'World']
  • 相关阅读:
    关于js中数组push之后长度明明有但是获取长度和随意的数组下标的时候不正常的问题
    MySQL学习笔记
    XPD977协议系列-支持 XPD-LINK™互联 USB 三端口控制器
    JavaScript系列之JS执行机制
    Linux实用操作-----软件的安装
    安全协议之-TLS握手过程详解
    面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间?
    Android通知Notification使用全解析,看这篇就够了
    【Unity】AssetBundle加载与卸载
    竞赛选题 深度学习实现行人重识别 - python opencv yolo Reid
  • 原文地址:https://www.cnblogs.com/jack-nie-23/p/16482882.html