当前位置: 移动技术网 > IT编程>脚本编程>Python > Python语法学习记录(21):for在单行中的理解

Python语法学习记录(21):for在单行中的理解

2020年07月14日  | 移动技术网IT编程  | 我要评论
文章目录1、for在单行中的理解2、多个for的嵌套1、for在单行中的理解返回对象应该是一个生成器a = [1,2,3,4]print(type(i for i in a))通过这个生成器内部的魔法函数或者运算重载进行其他数据类型的变化 例如在此生成器两边加入中括号[] 就会将生成器对象构成并返回一个新的列表,例子如下:a = [1,2,3,4]b = [ type(i) for i in a]print(type(b))print(b)可以看到内部的i还是与正常for循.

在这里插入图片描述

1、for在单行中的理解

返回对象应该是一个生成器

a = [1,2,3,4]
print(type(i for i in a))

在这里插入图片描述

通过这个生成器内部的魔法函数或者运算重载进行其他数据类型的变化 例如在此生成器两边加入中括号[] 就会将生成器对象构成并返回一个新的列表,例子如下:

a = [1,2,3,4]
b = [ type(i) for i in a]
print(type(b))
print(b)

在这里插入图片描述

可以看到内部的i还是与正常for循环中的迭代器一样进行迭代的

2、多个for的嵌套

有的时候我们会使用到多层的for的嵌套,因为所需要迭代的数据类型有多层循环需要处理

a = [[1,2],[3,4]]
b = [ [j for j in i] for i in a]
print(b)

a = [[1,2],[3,4]]
b = [ [j+1 for j in i] for i in a] #迭代中是可以有运算或者其他操作的就跟正常语序语法是一样的
print(b)

在这里插入图片描述

多个for嵌套生成一个列表 主要用于展开成一个列表

a = [[1,2],[3,4]]
b = [ j for i in a for j in i ]  # 注意这里需要先出现的是i 之后才可以使用i
print(b)

在这里插入图片描述

# 可适用于这种场景的展开非常方便
a = [
    [1,3],
    [3],
    [1,2,3],
    [1,2],
]
# 但是对于这种就会报错
# a = [1,3,[3],[1,2,3],[1,2]]
b = [ j for i in a for j in i ]
print(b)

在这里插入图片描述
除了列表以外的其他例子

a = [{'id':1 ,'label':1 },{'id':2 ,'label':4 }]# a 的结构为一个两元素的列表   每个元素中有一个字典   每个字典中有两个key分别为 id 和 label
b =[
    [yuansuzidian[duiyingyuansu] for yuansuzidian in a] for duiyingyuansu in ['id','label']
    ]
# yuansuzidian 对应于 a中的两个元素迭代   duiyingyuansu 对应于 ['id','label'] 中的两个元素分别为 'id' 'label'
print(b)

b ={duiyingyuansu:[yuansuzidian[duiyingyuansu] for yuansuzidian in a] for duiyingyuansu in ['id','label']}
print(b)
# yuansuzidian 对应于 a中的两个元素迭代   duiyingyuansu 对应于 ['id','label'] 中的两个元素分别为 'id' 'label'
# 同时这句话使用字典的形式 把最后的生成器做出来一个字典  目的是为了吧id和label分成两个对应的列表

在这里插入图片描述

与if的连用

dic = {
    1:{'index':2, 'data':'klm'},
    2:{'index':7, 'data':'cde'},
}
ran = range(1,5)
ret = [(k, v) for (k, v) in dic.items() if v['index'] in ran]
print(ret)
# 其含义是:
ret = []
for (k,v) in dic.items():
    idx = v['index']
    if idx in ran:
        ret.append( (k,v) )![在这里插入图片描述](https://img-blog.csdnimg.cn/2020071322001837.png)

在这里插入图片描述

本文地址:https://blog.csdn.net/qq_41554005/article/details/107325727

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网