1.list comprehensions
列表推导(List comprehensions)是一种在Python中创建列表的紧凑而强大的方式。它们允许您使用简洁的语法从一个可迭代的对象(如列表、元组、集合、字典等)中构建新的列表。
列表推导的基本语法是在方括号中包含一个表达式,后跟一个for循环,然后可以有零个或多个if语句。语法形式如下:
[expression for item in iterable if condition]
这里的表达式是对item的转换,item是从iterable中取出的每个元素。如果指定了条件(if condition),则只有当条件为真时,才会将转换后的item添加到新的列表中。
示例:
# Create list comprehension: squares
squares = [i**2 for i in range(0,10)]
#输出结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2.嵌套列表理解
嵌套列表推导(Nested list comprehensions)是指在列表推导中嵌套另一个或多个列表推导。这使得您可以使用更复杂的数据结构来生成列表,例如嵌套的列表或多维数组。
嵌套列表推导的语法允许您在内部循环中使用另一个列表推导,并在外部列表推导中使用内部列表推导的结果。语法形式如下:
[[expression for inner_item in inner_iterable] for outer_item in outer_iterable]
在这个语法中,外部列表推导的循环控制了外部的元素,内部列表推导的循环则用来处理内部的元素,并对每个内部元素应用一个表达式。
让我们来看一个例子来理解嵌套列表推导。假设我们有一个包含多个列表的列表,我们想要将所有的元素都平方,并将结果组成一个新的列表。我们可以使用嵌套列表推导来实现:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
squared_matrix = [[x**2 for x in row] for row in matrix]
print(squared_matrix)
#输出结果
[[1, 4, 9], [16, 25, 36], [49, 64, 81]]
在这个例子中,外部循环for row in matrix
遍历了每一行,而内部循环for x in row
则遍历了每一行中的每个元素。对于每个元素,我们计算了其平方并将其添加到内部列表中,最终形成了新的平方矩阵。
使用嵌套列表推导可以使得处理复杂数据结构变得更加简洁和优雅。然而,在使用嵌套列表推导时,确保代码可读性是至关重要的,因为过度的嵌套可能会使代码变得难以理解。
3.带有条件语句
3.1 只有if条件
# Create a list of strings: fellowship
fellowship = ['frodo', 'samwise', 'merry', 'aragorn', 'legolas', 'boromir', 'gimli']
# Create list comprehension: new_fellowship
new_fellowship = [member for member in fellowship if len(member)>=7]
# Print the new list
print(new_fellowship)
#输出结果
['samwise', 'aragorn', 'legolas', 'boromir']
3.2 if-else条件
# Create a list of strings: fellowship
fellowship = ['frodo', 'samwise', 'merry', 'aragorn', 'legolas', 'boromir', 'gimli']
# Create list comprehension: new_fellowship
new_fellowship = [member if len(member)>=7 else "" for member in fellowship ]
# Print the new list
print(new_fellowship)
#输出结果
['', 'samwise', '', 'aragorn', 'legolas', 'boromir', '']
注意if-else放在for loop前面,与单独的if条件不一样