7

Python 列表推导式:简洁、高效的数据操作艺术 - techlead_krischang

 1 year ago
source link: https://www.cnblogs.com/xfuture/p/17463862.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Python 列表推导式:简洁、高效的数据操作艺术

Python 的列表推导式,这个看似简单的语法糖,实则内含无限威力。在 Python 代码编写中,列表推导式的灵活性和简洁性让它成为了不可或缺的一部分。在这篇文章中,我们将更全面、更深入地探讨列表推导式,从基础的概念认识,到各类进阶的用法和操作,我们一一揭秘。最后,我们还将在 "One More Thing" 部分分享一个非常有趣且实用的列表推导式技巧,这会让你在编程道路上又多一份强大的工具。

1. 列表推导式:语法糖的力量

列表推导式,就是一种在 Python 中创建列表的方式,它的基础形式如下:

[expression for item in iterable]

它实质上是一个 for 循环的简化形式。例如,我们可以用它来创建一个包含 0 到 9 平方的列表:

squares = [x**2 for x in range(10)]
print(squares) # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

这样,你不需要再使用传统的 for 循环来创建列表,代码更加简洁和清晰。

2. 过滤元素:带条件的列表推导式

列表推导式更强大的地方在于,我们可以在其中加入条件判断,以过滤出我们想要的元素:

even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # Output: [0, 4, 16, 36, 64]

在这个例子中,我们只生成了偶数的平方,只需加入一个简单的 if 条件,我们就可以灵活地过滤出我们需要的元素。

3. 复杂的数据结构:嵌套的列表推导式

更进一步,列表推导式还可以嵌套使用,处理更复杂的数据结构,比如我们要将一个嵌套列表展平:

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_list = [x for sublist in nested_list for x in sublist]
print(flattened_list) # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

这个例子中,我们将一个二维的嵌套列表展平成了一维列表,就像是将多层次的数据展开,方便我们进行后续处理。

4. 数据变形:带表达式的列表推导式

列表推导式中的表达式可以帮助我们对数据进行变形:

strings = ['Hello', 'World', 'In', 'Python']
lowercase_strings = [s.lower() for s in strings]
print(lowercase_strings) # Output: ['hello', 'world', 'in', 'python']

在这个例子中,我们将一个包含几个字符串的列表,通过 str.lower() 函数,将其转换成了全小写。通过改变表达式,我们可以在生成新列表的同时,对数据进行各种变形操作。

5. 推广至其他数据结构:字典和集合的推导式

推导式不仅仅可以应用于列表,还可以推广到字典和集合中:

squared_dict = {x: x**2 for x in range(5)}
print(squared_dict) # Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

squared_set = {x**2 for x in range(5)}
print(squared_set) # Output: {0, 1, 4, 16, 9}

这两个例子分别演示了字典推导式和集合推导式的用法,这些结构的推导式可以更方便我们处理复杂的数据结构。

6. 性能优化:列表推导式与 map/filter 的比较

列表推导式不仅代码更加简洁,实际上在很多情况下,列表推导式的执行效率也优于传统的 mapfilter 函数:

import time

# Using list comprehension
start_time = time.time()
squares = [x**2 for x in range(1000000)]
end_time = time.time()
print(f"List comprehension took {end_time - start_time} seconds")

# Using map function
start_time = time.time()
squares = list(map(lambda x: x**2, range(1000000)))
end_time = time.time()
print(f"Map function took {end_time - start_time} seconds")

在这个例子中,我们分别用列表推导式和 map 函数创建一个包含一百万个元素的列表,可以看到列表推导式的执行时间通常要少于 map 函数。

One More Thing

在我的 GitHub 学习过程以及在各种技术博客中阅读,我发现一个关于列表推导式的有趣且实用的技巧,那就是使用列表推导式实现全排列:

perms = [(x, y, z) for x in range(3) for y in range(3) for z in range(3) if x != y and y != z and x != z]
print(perms) # Output: [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]

这个例子通过列表推导式生成了 3 个元素的全排列,使用了嵌套循环和条件判断,非常简洁而高效。

总的来说,Python 的列表推导式是一个非常强大而灵活的工具,能够帮助我们更好地处理数据和创建数据结构。希望这篇文章能帮助你更深入地理解和应用列表推导式,让你的 Python 代码更加简洁和高效。

如有帮助,请多关注
个人微信公众号:【Python全视角】
TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK