首页 > 编程语言 >python 推导式

python 推导式

时间:2023-05-04 16:23:54浏览次数:34  
标签:word 推导 python 生成 列表 expression 字典

在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]

 

标签:word,推导,python,生成,列表,expression,字典
From: https://www.cnblogs.com/yund/p/17371604.html

相关文章

  • python-Gradio 机器学习演示库
    python-GradioGradio是一个开源的Python库,用于构建机器学习和数据科学演示应用。有了Gradio,你可以围绕你的机器学习模型或数据科学工作流程快速创建一个简单漂亮的用户界面。Gradio适用于以下情况:为客户/合作者/用户/学生演示你的机器学习模型。通过自动共享链接快速部署你的......
  • python 列表拼接拓展
    #-*-coding:utf-8-*-#列表例存放字节类型数据bytes_list=[b'1',b'2',b'3']#列表里存放字符串类型数据str_list=['1','2','3']#列表里存放混合类型数据(字符串,字节,int)mix_list=[b'1','2','3&#......
  • Python网页应用开发神器fac 0.2.6版本重要新功能一览
    fac项目地址:https://github.com/CNFeffery/feffery-antd-components,欢迎star支持大家好我是费老师,距离我的开源Python网页应用通用组件库fac的0.2.0版本发布已过去半个多月的时间,在国内外众多fac用户的反馈建议下,经过高强度的优化和功能更新,目前fac已经更新到0.2.6版本,且......
  • Python报错:Can't connect to HTTPS URL because the SSL module is not available
    参考文章:(32条消息)Can‘tconnecttoHTTPSURLbecausetheSSLmoduleisnotavailable-关于anaconda中的SSL模块错误_anacondahttps报错_Sky_Tree_Delivery的博客-CSDN博客具体操作:将以下文件移动位置D:\Anaconda\Library\bin->D:\Anaconda\DLLs(此处D盘为我自己的安......
  • SDN 编写Python脚本创建自定义网络拓扑
    编写Python脚本创建自定义网络拓扑,包括5台交换机5台主机frommininet.topoimportTopoclassRingTopo(Topo):def__init__(self):Topo.__init__(self)#Createswitchess_num=5h_num=5switches=[]hosts......
  • python11:局部变量与全局变量
    局部变量:在函数内部定义的变量,作用域仅仅局限在函数的内部。不同的函数可以定义相同的局部变量,但是各自用各自的不会产生影响注意:局部变量在函数执行完毕后会释放作用:为了临时的保存数据,需要在函数中定义来进行存储。全局变量:当全局变量和局部变量出现重复定义的时候,程序就......
  • python判断2个版本号大小
    摘自:https://blog.csdn.net/lizy0327/article/details/121164549此方法唯一的“限制”就是要求版本号之间默认是以.为连接的,当然如果是其他字符连接的话,完全可以在split修改即可,所以严格意义上来说这也不算限制,只能是默认传入的版本号是以.为连接而已。此外,对于版本号是否长度相......
  • python 迭代器
    在Python3中,迭代器是一种可以逐个访问集合元素的对象,它实现了迭代协议(IteratorProtocol),即该对象必须具有__iter__()和__next__()方法。__iter__() 方法返回迭代器对象本身。__next__() 方法返回下一个元素。当没有更多的元素时,__next__()方法应引发StopIteration......
  • Python爬虫需要哪些基础
    Python爬虫是指使用Python语言编写程序,自动化地访问Web页面并抓取其中的信息。以下是Python爬虫的基础知识:爬虫的工作原理:爬虫程序通过网络请求获取Web页面的HTML源码,然后使用正则表达式或解析器提取所需要的信息。常用的爬虫库:Python中常用的爬虫库包括requests、BeautifulSoup......
  • python 装饰器
    装饰器(Decorator)是Python语言中的一种高级技巧,可以在不改变原有代码的基础上,动态地给函数或类增加额外的功能。本质上,装饰器就是一个普通函数,它可以接受一个或多个参数,并且返回一个函数作为结果。装饰器的语法如下:@decorator_functiondeffunction_to_be_decorated():#F......