AdvancePython-python中的列表推导式、生成器表达式、字典表达式

python中,之前一直都是for循环迭代列表,但是最简单的还是列表推导式,列表解析式(List comprehension)或者称为列表推导式,是 Python 中非常强大和优雅的方法。它可以基于现有的列表做一些操作,从而快速创建新列表。列表推导式不仅可读性非常强,它所需要的代码量是最少的,它的执行速度也是最快的。虽然前面被加了列表两个字,但是这个语法同样适用于dict、set等这一系列可迭代(iterable)数据结构。

列表推导式:

Example1:

#1.提取出1-20之间的奇数
odd_list = []
for i in range(21):
    if i%2 ==1:
        odd_list.append(i)
print(odd_list)

结果:

我们换一种方式,使用列表推导式:

odd_list = [i for i in range(21) if i%2 == 1]
print(odd_list)

结果还是一样。但是速度有所提升,代码量也变少,是不是感觉有点意思哈哈哈哈哈哈(滑稽脸)

再比如,要生成一个10以内的整数的平方的列表:

squares = [i**2 for i in range(10)]

Example2:

逻辑复杂的情况(算奇数的平方)
def hadle_otem(item):
    return item * item
odd_list = [hadle_otem(i) for i in range(21) if i%2 ==1]
print(type(odd_list))  #<class 'list'>
print(odd_list)   #[1, 9, 25, 49, 81, 121, 169, 225, 289, 361]

生成器表达式:

把中括号变成小括号,就变成了生成器 generator形式

#如果换成小括号就变成了生成器
odd_gen = (i for i in range(21) if i%2 ==1)
print(type(odd_gen))  #<class 'generator'>生成器
#生成器打印
for item in odd_gen:
    print(item)             
#1
#3
#5
#7
#9
#11
#13
#15
#17
#19

 字典推导式:

#字典推导式,将key value颠倒
my_dict = {'bobby1':22,'bobby2':23,'hobby3':5}
reversed_dict = {value:key for key,value in my_dict.items()}
print(reversed_dict)

结果:

集合推导式:

#集合推导式,输出key值
#my_set = set(my_dict.keys())
my_set = {key for key,value in  my_dict.items()}
print(type(my_set))
print(my_set)

结果:

通过以上讲解就可以掌握Python的列表推导式(list comprehension)了,简而言之,就是把多行for循环压缩成一行代码,这种语法适用于列表、字典、集合等可迭代数据结构(iterables)。

发布了16 篇原创文章 · 获赞 4 · 访问量 1778

猜你喜欢

转载自blog.csdn.net/qq_40509206/article/details/104044609