欢迎光临散文网 会员登陆 & 注册

effective python读书笔记——列表的推导式

2021-12-06 17:15 作者:与时代脱轨的级数  | 我要投稿

列表推导式来代替map函数来在原来列表基础上构造新列表更加简洁

a=[1,2,2,2,3,4,5]

#运用map函数构造列表

map_method=list(map(lambda x:x**2,a))

#列表推导法

list_method=[x**2 for x in a]

#列表推导法可过滤原列表

even_number_list=[x**2 for x in a if x%2==0]#只要偶数

#map函数也可以通过filter方法来实现,略难

map_even_number=list(map(lambda x:x**2,filter(lambda x:x%2==0,a)))

#字典推导

dictionary_method={x:x**2 for x in a if x%2==0}#{:}

#集合推导

set_method={x**2 for x in a if x%2==0}#{}

#而用map方法来实现,就更加复杂了

map_dictionary=dict(map(lambda x:(x,x**2),filter(lambda x:x%2==0,a)))

map_set=set(map(lambda x:(x,x**2),filter(lambda x:x%2==0,a)))


print(f'map_method :{map_method}')

print(f'list_method :{list_method}')

print(f'even_number_list :{even_number_list}')

print(f'map_even_number :{map_even_number}')

print(f'dictionary_method :{dictionary_method}')

print(f'set_method :{set_method}')#集合中的元素是无序的,同样的元素只出现一次

print(f'map_set :{map_set}')

print(f'map_dictionary :{map_dictionary}')

运行结果

关于表达式的嵌套:

matrix=[[1,2,3],[4,5,6],[7,8,9]]#一个矩阵

#用列表表达式转化成列表

turn_to_list=[x for row in matrix for x in row]

#也可以对原二维矩阵进行数值转化

square_list=[[x**2 for x in row ] for row in matrix]#对每个数进行平方

#但如果是三维矩阵的话,用此方法就显得比较复杂

matrix_3=[[[1,2],[3,4]],[[5,6],[7,8]]]

turn_to_list3=[x for sublist1 in matrix_3 for sublist2 in sublist1 for x in sublist2]

#用正常的for循环就比较清晰

for_method=[]

for sublist1 in matrix_3:

    for sublist2 in sublist1:

        for_method.extend(sublist2)

        '''

        for i in sublist2:

            for_method.append(i)

        '''


print(f'turn_to_list :{turn_to_list}')

print(f'square_list :{square_list}')

print(f'turn_to_list3 :{turn_to_list3}')

print(f'for_method :{for_method}')

运行结果

关于if条件的使用:

#同一层循环内的if语句默认为and关系

a=[1,2,3,4,5]

b=[x for x in a if x<4 if x%2!=0]

c=[x for x in a if x<4 and x%2!=0]

#b,c两写法等价

print(f'b : {b}')

print(f'c : {c}')

#每一层的子表达式也都可以有if条件

matrix=[[1,2,3],[4,5,6],[7,8,9]]

#筛选出各行元素和大于10的,并只保留整除3的项

selected=[[x for x in row if x%3==0]\

        for row in matrix if sum(row)>10]

print(f'selected :{selected}')

运行结果



effective python读书笔记——列表的推导式的评论 (共 条)

分享到微博请遵守国家法律