推荐指数:★★★★
=======================================
python3:列表推导式,生成器表达式,字典推导式
=======================================
一、列表推导式
1.熟悉列表的一般格式:
1.1 代码:
b=[]
for i in range(21): #推导式,从0~20取
if i%2==1: #取余数为1,就是找奇数
b.append(i) #逐步添加到列表b中
print(b)
显示:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
1.2 代码:
b=list(range(21))
#print(b) #该列表从0~20
#列表切片法
print(b[1::2]) #从上述列表中的第1位,不是第0位开始取,间隔2,取值,就是取奇数
显示:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
2.列表推导式:
2.1 代码:
b=list(range(21))
b=[i for i in b if i%2==1] #列表推导式
print(b)
显示:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
2.2 代码:
#抽取 0~20的奇数并计算其平方
def square(i): #自定义函数,取平方
return i*i
b=list(range(21))
b=[square(i) for i in b if i%2==1]
print(b)
显示:[1, 9, 25, 49, 81, 121, 169, 225, 289, 361]
列表推导式解析:
i 是指填充到列表的值
for i in b 是遍历b
if i%2==1 对循环的值进行过滤
3.代码:
l1 = [['red','qqred','light','eggqq','black'],['list','dict','dictqq','qqset','pigqq']]
l2=[]
for name in l1:
l3=[n for n in name if n.count('q')>=2]
l2.extend(l3) #扩展列表
print(l2)
l4=[n for name in l1 for n in name if n.count('q')>=2]
print(l4)
显示:[‘DOG’, ‘GREEN’, ‘GOD’, ‘ python ‘, ‘LIST’]
4.列表套列表
代码:
l = [('red', 'green', ' blue '), ('python', 'c++' ,' java ','go'), ('big', 'small', 'tiny','bigger','biggest')]
r = [x for t in l for x in t]
print(r)
r2 = [[x for x in t] for t in l]
print(r2)
显示:l2=l4
[‘qqred’, ‘eggqq’, ‘dictqq’, ‘qqset’, ‘pigqq’]
★复习★:
list.extend(seq)
seq — 元素列表,可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。
5.列表套元组
代码:
d1=[x for x in reversed([32, 21, 55, 43, -11])]
print(d1)
d2=[x for x in sorted([32, 21, 55, 43, -11])]
print(d2)
显示:
[‘red’, ‘green’, ‘blue’, ‘python’, ‘c++’, ‘java’, ‘go’, ‘big’, ‘small’, ‘tiny’, ‘bigger’, ‘biggest’]
[[‘red’, ‘green’, ‘blue’], [‘python’, ‘c++’, ‘java’, ‘go’], [‘big’, ‘small’, ‘tiny’, ‘bigger’, ‘biggest’]]
6.列表顺序反转和排序
代码:
b=list(range(21))
b=(i for i in b if i%2==1)
#print(b)
#显示:<generator object <genexpr> at 0x7fd17be39740>
a=[]
for i in b:
#print(i)
a.append(i)
print(a)
显示:
[-11, 43, 55, 21, 32]
[-11, 21, 32, 43, 55]
二、生成器表达式
generator 这就是生成器的标识,不要以为用小括号就是set,tuple。
代码:
b={"boy":30,"girl":25}
dict={value:(key+1) for value,key in b.items() }
print(dict)
显示:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
三、字典推导式
1.代码:
d1 = {"a_key":"a_value", "b_key":"b_value", "c_key":"c_value"}
d2 = {v:k for k,v in d1.items()}
print(d2)
显示:{‘boy’: 31, ‘girl’: 26}
2.代码:字典的键值对换
l = [("小王",18), ("小张",24), ("小李", 20)]
#d= {name:age for name,age in l}
d= {n:a for n,a in l}
print(d)
显示:{‘a_value’: ‘a_key’, ‘b_value’: ‘b_key’, ‘c_value’: ‘c_key’}
3.代码: 根据可迭代的list对象构建字典
set_x = (1, 2, 3, 4, 5)
dict_y = {x:x*3 for x in set_x}
print(dict_y)
显示:{‘小王’: 18, ‘小张’: 24, ‘小李’: 20}
4.代码:以一个set集合中的值作为key,以3倍的key作为值构建一个字典
sxx = ['to', 'two', 'three', 'g','good', 'pip']
d={ len (s) for s in sxx} #对列表中的 字符串 测长度len,放入字典d中
print(d)
d1 = {value:i for i, value in enumerate(sxx)}
print(d1)
d2 = dict((value,i) for i, value in enumerate(sxx))
print(d2)
显示:{1: 3, 2: 6, 3: 9, 4: 12, 5: 15}
5.代码:
sxx = ['to', 'two', 'three', 'g','good', 'pip']
d={len(s) for s in sxx} #对列表中的字符串测长度len,放入字典d中
print(d)
d1 = {value:i for i, value in enumerate(sxx)}
print(d1)
d2 = dict((value,i) for i, value in enumerate(sxx))
print(d2)
显示:
{1, 2, 3, 4, 5}
{‘to’: 0, ‘two’: 1, ‘three’: 2, ‘g’: 3, ‘good’: 4, ‘pip’: 5}
{‘to’: 0, ‘two’: 1, ‘three’: 2, ‘g’: 3, ‘good’: 4, ‘pip’: 5}