List Comprehensions[ˌkɒmprɪˈhenʃns]
:列表推导式
前面在学习Python基本数据类型时,学习了list。今天学习和列表关系紧密、简单但功能十分强大的知识点:列表推导式。
例如,要生成一个[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],前面在学习循环知识时,拓展学习了range()函数。所以借用range()函数:
# 生成一个[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
my_list = list(range(1, 11))
print(my_list)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果,要得到[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
呢?则可以这样实现:
# 生成一个[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
my_list = list(range(1, 11))
print(my_list)
# 定义一个容器,来盛放1, 4, 9, 16, 25, 36, 49, 64, 81, 100
my_list2 = []
for i in my_list:
my_list2.append(i * i)
# 打印my_list2
print(my_list2)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
尽管能实现目标,但略显繁琐。如果是用列表推导式,则会非常简洁:
# 利用列表推导式
my_list3 = [x*x for x in range(1, 11)]
print(my_list3)
运行结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
解析:
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,
拓展
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方, 带条件的列表推导式:
# 带条件的列表推导式
my_list4 = [x * x for x in range(1, 11) if x % 2 == 0]
print(r'my_list4 =', my_list4)
运行结果:
my_list4 = [4, 16, 36, 64, 100]
其他实例,利用列表推导式,将list中的字母大写转换为小写:
# 列表推导式
my_list5 = [s.lower() for s in ['HelLo', 'woRld']]
print(r'my_list5 =', my_list5)
运行结果:
my_list5 = ['hello', 'world']
还可以使用两层循环,可以生成全排列:
# 列表推导式 循环嵌套
my_list6 = [x + y for x in 'ABC' for y in 'XYZ']
print(r'my_list6 =', my_list6)
运行结果:
my_list6 = ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
提示
要注意:由于受到内存限制,列表推导式适用于列表容量不是特别大的列表等。如果是百万级别的数据量的list,列表推导式就不适用了。在数据量非常大时,就要用到前面学习过的生成器了。
小结
本文重点学习Python中的列表推导式:代码简洁但功能强大。在以后的可视图像绘制中,函数会常常用到这一知识点,要熟练掌握。
更多了解,可关注公众号:人人懂编程
微信公众号:人人懂编程
网友评论