Python - List Comprehension

2023-09-17 22:15:58

Python 中的列表推导是一种简单而紧凑的语法,用于从字符串或其他列表创建list。 这是一种非常简洁的方法,可以通过对现有列表中的每个项目执行操作来创建新列表。 列表推导比使用 for 循环处理列表要快得多。

列表理解语法:

[expression for element in iterable if condition]

根据上述语法,列表推导语法包含三个部分:表达式、一个或多个for loop,以及可选的一个或多个if conditions。 列表理解必须在方括号中 [] . 第一个表达式的结果将存储在新列表中。for 循环用于循环访问可迭代对象,该对象可以选择包含 if 条件。

假设我们想找到从 0 到 20 的偶数,那么我们可以使用 for loop 来完成,如下所示:

even_nums = []
for x in range(21):
    if x%2 == 0:
        even_nums.append(x)
print(even_nums)

输出:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

使用如下所示的列表理解技术可以轻松实现相同的结果。

even_nums = [x for x in range(21) if x%2 == 0]
print(even_nums)

输出:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

在上面的示例中,[x for x in range(21) if x%2 == 0] 使用列表推导式返回一个新列表。 首先,它执行 for 循环for x in range(21) if x%2 == 0 。如果指定的条件if x%2 == 0计算结果为 True,则将返回元素x。 如果条件的计算结果为 True,则 for 循环之前的表达式将被执行并存储在新列表中。在这里,表达式x只是将x的值存储到新列表中。

列表推导也适用于字符串列表。下面创建一个包含"a"的新字符串列表。

names = ['Steve', 'Bill', 'Ram', 'Mohan', 'Abdul']
names2 = [s for s in names if 'a' in s]
print(names2)

输出:

['Ram', 'Mohan']

上面,如果元素包含字符"a",表达式if 'a' in s返回 True。因此,新列表将包括包含"a"的名称。

下面的示例使用列表推导式来生成 1 到 10 之间的数字平方列表。

squares = [x*x for x in range(11)] 
print(squares) 

输出:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

上面,在没有任何 if 条件的情况下执行 for 循环for x in range(11)。for 循环 x*x 之前的表达式将元素的平方存储在新列表中。

使用嵌套循环的列表推导(List Comprehension using Nested Loops)

可以在列表推导表达式中使用嵌套循环。在下面的示例中,来自两个列表的元组形式的项的所有组合都添加到第三个列表对象中。

nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
nums=[(x,y) for x in nums1 for y in nums2]
print(nums)

输出:

[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

列出具有多个 if 条件的理解(List Comprehension with Multiple if Conditions)

我们可以使用带有列表理解的嵌套 if 条件。

nums = [x for x in range(21) if x%2==0 if x%5==0] 
print(nums)

输出:

[0, 10, 20]

列出具有 if-else 条件的理解(List Comprehension with if-else Condition)

下面的示例演示了 if..否则循环与列表理解。

odd_even_list = ["Even" if i%2==0 else "Odd" for i in range(5)]
print(odd_even_list)
odd_even_list = [str(i) + '=Even' if i%2==0 else str(i) + "=Odd" for i in range(5)]
print(odd_even_list)

输出:

['Even', 'Odd', 'Even', 'Odd', 'Even']
['0=Even', '1=Odd', '2=Even', '3=Odd', '4=Even']

使用列表理解展平列表 (Flatten List using List Comprehension )

列表理解的应用之一是将包含多个列表的列表扁平化为单个列表。

matrix=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flatList=[num for row in matrix for num in row]
print(flatList)

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

了解有关how to flatten list in Python的更多信息。

本文内容总结: