Python语法学习记录(21):for在单行中的理解
程序员文章站
2022-03-20 12:56:09
文章目录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