Python列表推导式详情

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 中非常方便的语法,可以用于快速生成一个新列表,并且可以方便地进行筛选、转换和操作。熟练掌握列表推导式的使用,可以大大提高代码的简洁性和可读性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签