首页 > 其他 > 详细

列表、元祖、集合、字典解析式

时间:2020-01-09 23:07:25      阅读:69      评论:0      收藏:0      [点我收藏+]

列表解析式

[expr for iter_item in iterable if cond_expr]

List_e = [ x ** 2 for x in range(10) ]
List_e 
#结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
List_f = []
for x in range(10):
    List_f.append( x ** 2 )    
List_f
#结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
List_g = list(map(lambda x:x ** 2,range(10)))
List_g
#结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

嵌套列表解析式

使用列表推导式嵌套时,需要注意前后调用关系。前推导式的值需要在后面书写才能生效。

需要输出的值放到推导式的最前面,生成输出值的推导式在最后面

list_1 = [[1, 2, 3], [4, 5, 6]]
list_2 = [i*2 for list_inside in list_1 for i in list_inside*2]
list_3 = []
for list_inside in list_1:
    for i in list_inside*2:
        list_3.append(i*2)
print(list_2)
print(list_3)

技术分享图片

 说明:

不建议使用多重嵌套,阅读带来障碍。可以考虑使用for循环。

 

 

 

进行行列互换

matrix = [ [1, 2, 3, 4],
           [5, 6, 7, 8],
           [9, 10, 11, 12],
        ]
len_1 = len(matrix[0])
list_2 = [[row[i] for row in matrix] for i in range(len_1)]
print(list_2)

 

技术分享图片

 

 

  • 列表解析支持多重嵌套
  • 列表解析支持多重迭代
  • 列表解析语法中的表达式可以是简单表达式,也可以是复杂表达式,甚至是函数列表解析语法中的表达式可以是简单表达式,也可以是复杂表达式,甚至是函数
  • 列表解析语法中的 iterable 可以是任意可迭代对

推荐在需要生成列表的时候使用列表解析

  • 使用列表解析更为直观清晰,代码更为简洁
  • 列表解析的效率更高(对于大数据处理,列表解析并不是一个最佳选择,过多的内存消耗可能会导致 MemoryError )

 

 

 

元组解析式

( expr for iter_item in iterable if cond_expr  )

也可以将元祖转化为列表在进行处理,处理完成后再转化成元祖

集合解析式

 {expr for iter_item in iterable if cond_expr }

也可以将集合转化为列表在进行处理,处理完成后再转化成集合

 

字典解析式

{key_ expr:valuse_expr for iter_item in iterable if cond_expr }

dict_1 = dict([(a, 1), (b, 2), (c, 3)])
dict_2 ={key+S: values**2 for key, values in dict_1.items() if values >= 2}
print(dict_2)

技术分享图片

列表、元祖、集合、字典解析式

原文:https://www.cnblogs.com/qianslup/p/12160801.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!