python 推导式

在Python中,列表推导式、字典推导式和集合推导式都是常见的推导式。它们可以让我们使用一种简洁而强大的语法来快速创建新的序列或映射数据类型。

  1. 列表推导式

列表推导式是最常见的一种推导式,用于通过对一个序列中的每个元素应用一个表达式来快速生成一个新的列表。列表推导式的基本语法如下:

[expression for item in iterable if condition]

其中,expression是一个任意的Python表达式,item是要迭代的元素,iterable是一个可迭代对象,condition是一个可选的布尔表达式,用于过滤不符合条件的元素。

以下是一些使用列表推导式生成新列表的示例:

复制代码
# 生成一个由1~10的平方组成的列表
squares = [x * x for x in range(1, 11)]

# 生成一个包含所有字符串的长度的列表
words = ['apple', 'banana', 'cherry']
lengths = [len(word) for word in words]

# 生成一个只包含偶数的列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [num for num in numbers if num % 2 == 0]
复制代码
  1. 字典推导式

字典推导式可以用于快速生成一个新的字典,其语法类似于列表推导式,但需要使用一对花括号来表示字典。字典推导式的基本语法如下:

{key_expression: value_expression for item in iterable if condition}

其中,key_expression和value_expression都是任意的Python表达式,item是要迭代的元素,iterable是一个可迭代对象,condition是一个可选的布尔表达式,用于过滤不符合条件的元素。

以下是一些使用字典推导式生成新字典的示例:

# 生成一个由单词和它们的长度组成的字典
words = ['apple', 'banana', 'cherry']
word_dict = {word: len(word) for word in words}

# 生成一个只包含偶数的字典
numbers = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}
even_dict = {key: value for key, value in numbers.items() if value % 2 == 0}
  1. 集合推导式

集合推导式与列表推导式类似,但用于生成一个新的集合对象。集合推导式的基本语法如下:

{expression for item in iterable if condition}

其中,expression是一个任意的Python表达式,item是要迭代的元素,iterable是一个可迭代对象,condition是一个可选的布尔表达式,用于过滤不符合条件的元素。

以下是一个使用集合推导式生成新集合的示例:

# 生成一个只包含偶数的集合
numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
evens = {num for num in numbers if num % 2 == 0}

除了常见的列表推导式、字典推导式和集合推导式之外,Python还提供了一些更加高级的推导式,例如生成器推导式和嵌套推导式。

  1. 生成器推导式

生成器推导式与列表推导式类似,但使用圆括号而不是方括号来表示生成器对象。它可以用于快速生成一个新的生成器对象,从而实现延迟计算和节约内存空间。

以下是一个使用生成器推导式生成斐波那契数列的示例:

# 生成斐波那契数列的生成器对象
fib = (x if x <= 1 else fib(x-1) + fib(x-2) for x in range(10))

# 逐一输出数列的前10项
for num in fib:
    print(num)
  1. 嵌套推导式

嵌套推导式可以用于在一个推导式中使用另一个推导式,从而生成更加复杂的数据结构。例如,在一个字典中使用列表推导式生成多个键值对。

以下是一个使用嵌套推导式生成字典的示例:

# 生成一个包含每个单词和它们出现位置的字典
sentence = 'the quick brown fox jumps over the lazy dog'
word_dict = {word: [i for i, w in enumerate(sentence.split()) if w == word] for word in set(sentence.split())}

# 输出结果
print(word_dict)

在这个示例中,使用set()函数获取了一个不重复的单词集合。然后,在字典推导式内部,使用列表推导式生成了每个单词和它们出现位置的键值对。

以下是Python3中嵌套推导式的语法结构:

  • 列表嵌套推导式:[expression for item1 in iterable1 for item2 in iterable2]
  • 集合嵌套推导式:{expression for item1 in iterable1 for item2 in iterable2}
  • 字典嵌套推导式:{key_expression : value_expression for item1 in iterable1 for item2 in iterable2}

其中,第一个迭代器 iterable1 用于最外层循环,而第二个迭代器 iterable2 用于内部循环。这样就可以在每个 item1 上执行所有 item2 的操作。

例如,以下列表推导式使用嵌套来创建一个包含矩阵行列元素之和的新列表:

matrix = [[1, 2], [3, 4], [5, 6]]
sums = [sum(row) for row in matrix]
print(sums)  # 输出:[3, 7, 11]

还可以在推导式中添加条件表达式,以便根据特定条件过滤输入数据。例如,以下列表推导式使用条件表达式来筛选出输入列表中的偶数:

input_list = [1, 2, 3, 4, 5]
evens = [x for x in input_list if x % 2 == 0]
print(evens)  # 输出:[2, 4]

 

posted @   乐瓜乐虫  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示