Python面试题:请解释 Python 的列表推导式(list comprehension)

Python 的列表推导式(List Comprehension)是一种简洁且强大的生成列表的方式,它使得代码更加简洁和可读。列表推导式通过一种简明的语法来创建和操作列表,通常比使用循环生成列表更为优雅。

基本语法

列表推导式的基本语法如下:

[expression for item in iterable if condition]
  • expression:生成新列表中的元素,可以是对 item 的某种操作。
  • item:从 iterable 中取出的元素。
  • iterable:可以是任何可迭代对象,如列表、元组、字符串、range 等。
  • condition:可选的条件,只有满足该条件的元素才会被加入新列表中。

示例

创建一个简单的列表

使用列表推导式生成一个包含前10个整数的列表:

numbers = [i for i in range(10)]
print(numbers)  # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
带条件的列表推导式

生成一个包含前10个整数中偶数的列表:

even_numbers = [i for i in range(10) if i % 2 == 0]
print(even_numbers)  # 输出: [0, 2, 4, 6, 8]
生成平方数列表

生成一个包含前10个整数的平方的列表:

squares = [i ** 2 for i in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
嵌套循环的列表推导式

生成一个 3x3 矩阵的所有元素组合:

combinations = [(x, y) for x in range(3) for y in range(3)]
print(combinations)
# 输出: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
处理嵌套列表

给定一个嵌套列表,生成一个包含所有元素的平面列表:

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
带有函数的列表推导式

将一个字符串列表中的每个字符串转换为大写:

words = ['hello', 'world', 'python']
upper_words = [word.upper() for word in words]
print(upper_words)  # 输出: ['HELLO', 'WORLD', 'PYTHON']

其他推导式

除了列表推导式,Python 还支持集合推导式、字典推导式和生成器表达式。

集合推导式

生成一个包含前10个整数平方的集合(去除重复元素):

squares_set = {i ** 2 for i in range(10)}
print(squares_set)
# 输出: {0, 1, 64, 36, 4, 9, 16, 49, 81, 25}
字典推导式

生成一个字典,其中键是前10个整数,值是它们的平方:

squares_dict = {i: i ** 2 for i in range(10)}
print(squares_dict)
# 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
生成器表达式

生成器表达式类似于列表推导式,但返回的是一个生成器对象,而不是一个列表。生成器表达式使用圆括号 () 而不是方括号 []

squares_gen = (i ** 2 for i in range(10))
print(squares_gen)  # 输出: <generator object <genexpr> at 0x...>
print(list(squares_gen))  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

总结

列表推导式是 Python 中一种简洁而强大的生成列表的方式。它不仅提高了代码的可读性,还简化了代码的书写。通过熟练掌握列表推导式,可以编写出更加优雅和高效的 Python 代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超哥同学

赠人玫瑰 手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值