Python开发(人工智能/大数据/机器学习)

16.Python编程:列表推导式

2018-04-09  本文已影响7人  TensorFlow开发者

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中的列表推导式:代码简洁但功能强大。在以后的可视图像绘制中,函数会常常用到这一知识点,要熟练掌握。


更多了解,可关注公众号:人人懂编程


微信公众号:人人懂编程
上一篇 下一篇

猜你喜欢

热点阅读