列表解析式
列表解析式List Comprehension,也叫列表推导式
x = []
for i in range(10):
x.append((i+1)**2)
print(x)
写成推导式
[(i+1)**2 for i in range(10)]
Out[2]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
语法
[返回值 for 元素 in 可迭代对象 if 条件]
使用中括号[],内部是for循环,if条件语句可选
立即返回一个新的列表
求10以内的偶数
[i for i in range(2,10,2)]
Out[3]: [2, 4, 6, 8]
复杂语法
for循环套if判断语句生成列表
[expr for item in iterable if cond1 if cond2]
#等价于
ret = []
for item in iterable:
if cond1:
if cond2:
ret.append(expr)
for循环套for循环生成列表
[expr for i in iterable1 for j in iterable2 ]
#等价于
ret = []
for i in iterable1:
for j in iterable2:
ret.append(expr)
练习
列表解析式打印九九乘法表
[print('{}*{}={:<4}'.format(i, j, i * j), end='\t' if i !=j else '\n') for i in range(1, 10) for j in range(1, i+1) ]
# 运行结果
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 ` 9*9=81
有一个列表lst = [1,4,9,16,2,5,10,15],生成一个新列表,要求新列表元素是lst相邻2项的和
lst = [1, 4, 9, 16, 2, 5, 10, 15]
print([lst[i] + lst[i + 1] for i in range(len(lst) - 1)])
"0001.abadicddws" 是ID格式,要求ID格式是以点号分割,左边是4位从1开始的整数,右边是10位随机小写英文字母。请依次生成前100个ID的列表
import random
x=['{:04}.{}'.format(i, ''.join([chr(random.randint(97, 122)) for i in range(10)])) for i in range(10)]
print(x)
0000.jnvlhexuup
0001.emoegpunnr
0002.aquefvpjxv
0003.dadcmgteve
0004.pswucemswb
0005.ozomkpbgkl
0006.stslcyjnzd
0007.wpudukauto
0008.pjavoruhjf
0009.lkwhfdrlkc
生成器表达式
语法
(返回值 for 元素 in 可迭代对象 if 条件)
列表解析式的中括号换成小括号就行了
返回一个生成器对象
和列表解析式的区别
生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值
列表解析式是立即返回值
生成器对象
可迭代对象
迭代器
生成器表达式
延迟计算
返回可迭代对象迭代器,可以迭代
只能迭代一次
#生成器生成的列表只能遍历一次
a=(i for i in range(5))
for j in a:
print(j)
print('-'*30)
for j in a:
print(j)
#结果
0
1
2
3
4
------------------------------
列表解析式
立即计算
返回可迭代对象列表,不是迭代器
可反复迭代
#列表解析式生成的列表可以反复遍历
a=[i for i in range(5)]
for j in a:
print(j)
print('-'*30)
for j in a:
print(j)
#结果
0
1
2
3
4
------------------------------
0
1
2
3
4
集合解析式
语法
{返回值 for 元素 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{}就变成了集合解析式
立即返回一个集合
字典解析式
语法
{key:value for 元素 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{},元素的构造使用key:value形式
立即返回一个字典
标签:10,迭代,生成器,列表,print,解析,表达式 From: https://www.cnblogs.com/guangdelw/p/16946059.html