python学习-list comprehensions

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条件不一样

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值