1. 列表推导式简介
列表推导式(List Comprehensions)是一种方便的语法,用于快速创建一个新列表,可以使用单行代码来生成新列表。
列表推导式通常用于从一个可迭代对象(如列表、元组、集合)中筛选出符合条件的元素,并对这些元素进行转换和操作,最终生成一个新列表对象。
下面是一个简单的例子,使用列表推导式生成一个新列表:
# 生成一个1~10的偶数列表
even_list = [n for n in range(1, 11) if n % 2 == 0]
print(even_list)
# 输出:[2, 4, 6, 8, 10]
2. 基本语法
2.1 最简单的列表推导式
最简单的列表推导式使用一个表达式,后面跟着一个循环,然后将这个表达式应用于每个循环元素,最终生成一个新列表,如下所示:
new_list = [expression for item in iterable]
其中,expression 是要生成的元素表达式,item 是可迭代对象中的元素,iterable 是可迭代对象,这个简单的形式等价于下面这个 for 循环:
new_list = []
for item in iterable:
new_list.append(expression)
2.2 带有条件的列表推导式
当然,我们通常不仅仅是简单的迭代生成一个新列表,我们可能需要根据条件进行筛选,然后对元素进行一些转换和操作,再生成一个新列表,这个时候就需要在列表推导式中加入判断条件:
new_list = [expression for item in iterable if condition]
其中,condition 是用于筛选元素的条件语句,可以是任意复杂的表达式,只有满足条件的元素才会被加入到新列表中。
2.3 多重循环的列表推导式
在列表推导式中,我们也可以使用多重循环嵌套,来生成更复杂的列表:
new_list = [expression for item1 in iterable1 for item2 in iterable2 if condition]
其中,item1 和 item2 分别是两个可迭代对象中的元素,iterable1 和 iterable2 是两个可迭代对象,condition 是用于筛选元素的条件语句。
3. 实际应用
3.1 将字符串列表转换为整数列表
我们有一个字符串列表,需要将其中的每个字符串转换为一个整数,并且生成一个新的整数列表,可以使用下面的列表推导式:
str_list = ['1', '2', '3', '4', '5']
int_list = [int(s) for s in str_list]
print(int_list)
# 输出:[1, 2, 3, 4, 5]
3.2 获取列表的子列表
我们有一个列表,需要获取其中某个区间的子列表,可以使用下面的列表推导式:
original_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sub_list = [original_list[i] for i in range(3, 7)]
print(sub_list)
# 输出:[4, 5, 6, 7]
3.3 从字典列表中筛选元素生成新列表
我们有一个字典列表,需要从中筛选出某个条件的字典元素,并将其中的一个键值对的值作为新列表的元素,可以使用下面的列表推导式:
dict_list = [{'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 22}, {'name': 'Charlie', 'age': 25}]
age_list = [d['age'] for d in dict_list if d['name'] != 'Bob']
print(age_list)
# 输出:[20, 25]
3.4 多重循环生成新列表
我们需要生成一个九九乘法表的元素列表,可以使用下面的列表推导式:
mul_list = [(i, j, i*j) for i in range(1, 10) for j in range(1, 10)]
print(mul_list)
# 输出:[(1, 1, 1), (1, 2, 2), (1, 3, 3), (1, 4, 4), (1, 5, 5), ..., (9, 6, 54), (9, 7, 63), (9, 8, 72), (9, 9, 81)]
4. 总结
列表推导式是 Python 中非常方便的语法,可以用于快速生成一个新列表,并且可以方便地进行筛选、转换和操作。熟练掌握列表推导式的使用,可以大大提高代码的简洁性和可读性。