生成式
- 列表生成式:用来生成列表的特定语法形式的表达式。是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list
普通的语法格式:[exp for iter_var in iterable]
#列表生成式:生成100个1~50之间的随机数值。
#先使用空列表 循环100次 每循环一次在random.randint(1,50)中选一个值保存到[]中
print([random.randint(1,50) for i in range(1,100)])
执行结果:
[42, 8, 22, 16, 34, 8, 37, 39, 31, 30, 7, 3, 11, 17, 39, 4, 8, 8, 16, 5, 12, 27, 15, 35, 1, 9, 5, 17, 41, 9, 14, 22, 29, 16, 30, 30, 44, 40, 32, 30, 20, 2, 28, 35, 19, 21, 38, 35, 12, 42, 30, 35, 9, 35, 34, 25, 44, 6, 8, 26, 26, 13, 19, 15, 37, 40, 15, 44, 1, 16, 27, 38, 15, 44, 5, 39, 23, 25, 7, 5, 43, 40, 16, 42, 20, 47, 14, 11, 9, 27, 36, 9, 43, 8, 20, 28, 14, 34, 17]
带过滤功能语法格式: [exp for iter_var in iterable if_exp]
#带过滤功能语法格式 1~100之间能被3整除的数
print([i for i in range(1,101) if i %3==0])
执行结果:
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
print([i+j for i in 'abc'for j in '123'])
执行结果:
['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
- 字典生成式:用来快速生成字典;
生成100个用户字典 用户名:密码
import pprint
pprint.pprint({'user'+str(x+1):'passwd'+str(x+1) for x in range(100)})
执行结果:
{'user1': 'passwd1',
'user10': 'passwd10',
'user100': 'passwd100',
'user11': 'passwd11',
'user12': 'passwd12',
'user13': 'passwd13',
'user14': 'passwd14',
'user15': 'passwd15',
'user16': 'passwd16',
'user17': 'passwd17',
'user18': 'passwd18',
'user19': 'passwd19',
'user2': 'passwd2',
'user20': 'passwd20',
'user21': 'passwd21',
'user22': 'passwd22',
'user23': 'passwd23',
'user24': 'passwd24',
'user25': 'passwd25',
'user26': 'passwd26',
'user27': 'passwd27',
'user28': 'passwd28',
'user29': 'passwd29',
'user3': 'passwd3',
'user30': 'passwd30',
'user31': 'passwd31',
'user32': 'passwd32',
'user33': 'passwd33',
'user34': 'passwd34',
'user35': 'passwd35',
'user36': 'passwd36',
'user37': 'passwd37',
'user38': 'passwd38',
'user39': 'passwd39',
'user4': 'passwd4',
'user40': 'passwd40',
'user41': 'passwd41',
'user42': 'passwd42',
'user43': 'passwd43',
'user44': 'passwd44',
'user45': 'passwd45',
'user46': 'passwd46',
'user47': 'passwd47',
'user48': 'passwd48',
'user49': 'passwd49',
'user5': 'passwd5',
'user50': 'passwd50',
'user51': 'passwd51',
'user52': 'passwd52',
'user53': 'passwd53',
'user54': 'passwd54',
'user55': 'passwd55',
'user56': 'passwd56',
'user57': 'passwd57',
'user58': 'passwd58',
'user59': 'passwd59',
'user6': 'passwd6',
'user60': 'passwd60',
'user61': 'passwd61',
'user62': 'passwd62',
'user63': 'passwd63',
'user64': 'passwd64',
'user65': 'passwd65',
'user66': 'passwd66',
'user67': 'passwd67',
'user68': 'passwd68',
'user69': 'passwd69',
'user7': 'passwd7',
'user70': 'passwd70',
'user71': 'passwd71',
'user72': 'passwd72',
'user73': 'passwd73',
'user74': 'passwd74',
'user75': 'passwd75',
'user76': 'passwd76',
'user77': 'passwd77',
'user78': 'passwd78',
'user79': 'passwd79',
'user8': 'passwd8',
'user80': 'passwd80',
'user81': 'passwd81',
'user82': 'passwd82',
'user83': 'passwd83',
'user84': 'passwd84',
'user85': 'passwd85',
'user86': 'passwd86',
'user87': 'passwd87',
'user88': 'passwd88',
'user89': 'passwd89',
'user9': 'passwd9',
'user90': 'passwd90',
'user91': 'passwd91',
'user92': 'passwd92',
'user93': 'passwd93',
'user94': 'passwd94',
'user95': 'passwd95',
'user96': 'passwd96',
'user97': 'passwd97',
'user98': 'passwd98',
'user99': 'passwd99'}
- 集合生成式:用来快速生成集合;
# 需求: 生成100个1~200之间的随机且不重复数值。
import random
print({random.randint(1, 200) for count in range(100)})
执行结果:
{3, 4, 7, 10, 14, 15, 17, 18, 19, 21, 23, 25, 26, 28, 31, 33, 36, 37, 40, 42, 44, 48, 51, 54, 56, 58, 62, 67, 68, 71, 79, 81, 84, 86, 87, 88, 89, 93, 95, 96, 100, 101, 102, 105, 106, 109, 110, 114, 116, 119, 123, 127, 131, 137, 140, 141, 149, 150, 151, 153, 154, 159, 162, 163, 165, 166, 168, 169, 172, 175, 177, 179, 184, 187, 190, 195, 196, 198}
生成式小案例
- 求以r为半径的圆的面积和周长(r的范围从1到10)。
import math
print({'s='+str(math.pi*r**2) :'C='+str(math.pi*2*r)for r in range(1,11)})
执行结果:
{'s=3.141592653589793': 'C=6.283185307179586', 's=12.566370614359172':