优秀的编程知识分享平台

网站首页 > 技术文章 正文

python3的列表、元组、字典的复习和推导式和生成器小结

nanyue 2024-08-19 19:13:22 技术文章 6 ℃


推荐指数:★★★★

=======================================

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}

Tags:

最近发表
标签列表