#!usr/bin/python#coding=UTF-8'''
Python3推导式
''''''
推导式:
提供了一种简明扼要的方法来创建列表、字典、集合,适用于列表、字典、集合等可迭代数据结构(iterables)。
它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。
执行顺序是依次往后执行(for-->for/if-->for/if......)
推导式简单的说就是把普通的多行for循环压缩成一行代码,
这种压缩语法适用于列表、字典、集合等可迭代数据结构(iterables)
''''''
列表推导式:一种快速生成列表的方式。
语法:
[结果 for循环 if条件]
'''#求列表中所有数字乘3后的列表
list1 =[1,2,3,4,5]
list2 =[x *3for x in list1]print(list2)#输出 [3, 6, 9, 12, 15]#带if判断的
list2 =[x *3for x in list1 if x >2]print(list2)#输出 [9, 12, 15]#多个for
list2 =[x * y for x in list1 for y inrange(3)]print(list2)#输出 [0, 1, 2, 0, 2, 4, 0, 3, 6, 0, 4, 8, 0, 5, 10]for y inrange(3):print(y,end=',')#输出 0,1,2,#多个for 多个if
list2 =[x * y for x in list1 for y inrange(3)if x >2if y >1]print(list2)#输出 [6, 8, 10]'''
字典推导式:
语法:[k:v for循环 if条件]
'''
dict1 ={'k1':1,'k2':2}
dict2 ={key: value *3for key,value in dict1.items()}print(dict2)#输出 {'k1': 3, 'k2': 6}'''
集合推导式:
语法:{结果 for循环 if条件}
'''
set1 ={5,4,3,2,1}
set2 ={x *2for x in set1 if x >2}print(set2)#输出 {8, 10, 6}'''
没有元组推导式
需要加tuple()函数,因为圆括号在Python中被用作生成器的语法了。
'''
tuple1 =(1,2,3,4,5)
tuple2 =(x *2for x in tuple1)print(tuple2)#输出 <generator object <genexpr> at 0x00000293282F9F90>#由此可以看出,我们得到了一个生成器,在通过tuple()返回来转化为元组
tuple1 =(1,2,3,4,5)
tuple2 =tuple(x *2for x in tuple1)print(tuple2)#输出 (2, 4, 6, 8, 10)
tuple1 =(1,2,3,4,5)
tuple2 =tuple(x *2for x in tuple1 if x >2)print(tuple2)#输出 (6, 8, 10)