乐趣区

关于python:Python-列表推导式简洁高效的数据操作艺术

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 产品业务负责人。

退出移动版