Python中的list()和map() 用法

list()

在Python中,list() 是一个内置函数,用于创建列表(list)对象。它有几个不同的用途,但最常见的是将一个可迭代对象(如元组、字符串、集合或其他列表)转换为一个新的列表。

以下是一些使用 list() 函数的例子:

从其他可迭代对象创建列表

你可以将一个元组、字符串或集合转换为一个列表

# 从元组创建列表  
tuple_example = (1, 2, 3)  
list_from_tuple = list(tuple_example)  
print(list_from_tuple)  # 输出:[1, 2, 3]  
  
# 从字符串创建列表(这会将字符串拆分为单个字符的列表)  
string_example = "hello"  
list_from_string = list(string_example)  
print(list_from_string)  # 输出:['h', 'e', 'l', 'l', 'o']  
  
# 从集合创建列表(注意集合是无序的,所以列表中的元素顺序可能与集合中的不同)  
set_example = {4, 2, 3, 1}  
list_from_set = list(set_example)  
print(list_from_set)  # 输出可能是:[4, 2, 3, 1] 或其他顺序,因为集合是无序的

创建空列表

虽然通常使用方括号 [] 来创建空列表,但也可以使用 list() 函数而不带任何参数来创建空列表:

empty_list = list()  
print(empty_list)  # 输出:[]

列表推导式与 list() 结合使用

list() 函数还可以与生成器表达式结合使用,将生成器转换为列表:

# 使用列表推导式创建列表  
square_list = [x**2 for x in range(5)]  
print(square_list)  # 输出:[0, 1, 4, 9, 16]  
  
# 使用生成器表达式和 list() 创建列表  
square_generator = (x**2 for x in range(5))  
square_list_from_generator = list(square_generator)  
print(square_list_from_generator)  # 输出:[0, 1, 4, 9, 16]

在这些例子中,list() 函数用于将生成器表达式的结果转换为一个列表。生成器表达式本身并不立即计算所有值,而是返回一个生成器对象,该对象在迭代时生成值。使用 list() 函数会触发生成器的迭代,并将所有生成的值收集到一个列表中。

总的来说,list() 函数是一个强大的工具,用于从各种可迭代对象创建列表,并且可以与生成器表达式等高级特性结合使用。

map() 

在Python中,map() 是一个内置函数,它接受一个函数和一个或多个可迭代对象(例如列表或元组)作为输入,并返回一个迭代器,该迭代器生成通过将函数应用于输入迭代器的每个项目而得到的结果。map() 函数常用于将一个函数应用于一个序列(或任何可迭代对象)的所有元素。

下面是一些使用 map() 函数的例子:

基本用法

假设我们有一个数字列表,我们想要计算列表中每个数字的平方:

numbers = [1, 2, 3, 4, 5]  
squared = map(lambda x: x**2, numbers)  
print(list(squared))  # 输出:[1, 4, 9, 16, 25]

在这个例子中,我们使用了 lambda 表达式来定义一个匿名函数 x**2,它计算一个数的平方。然后,我们将这个匿名函数和 numbers 列表传递给 map() 函数。map() 函数返回一个迭代器,我们使用 list() 函数将其转换为一个列表以便打印。

应用于多个可迭代对象

map() 函数也可以接受多个可迭代对象,并将函数应用于这些对象的对应元素。例如,假设我们有两个列表,我们想要将它们的对应元素相加:

list1 = [1, 2, 3]  
list2 = [4, 5, 6]  
sums = map(lambda x, y: x + y, list1, list2)  
print(list(sums))  # 输出:[5, 7, 9]

在这个例子中,lambda 函数接受两个参数 x 和 y,并将它们相加。map() 函数将这个函数应用于 list1 和 list2 的对应元素。

与内置函数结合使用

你也可以将 map() 与内置函数结合使用,例如将字符串列表中的所有字符串转换为大写:

strings = ["hello", "world", "python"]  
uppercase_strings = map(str.upper, strings)  
print(list(uppercase_strings))  # 输出:['HELLO', 'WORLD', 'PYTHON']

在这个例子中,我们直接传递了 str.upper 方法(它是一个字符串对象的方法,用于将字符串转换为大写)给 map() 函数。由于 str.upper 不需要任何额外的参数(除了它所属的字符串对象本身),所以我们只需要传递方法名而不需要 lambda 表达式。

map() 函数在函数式编程中非常有用,它允许你以一种简洁的方式对一个序列的每个元素应用一个函数。然而,请注意,map() 返回的是一个迭代器,所以如果你需要列表或其他类型的集合,你需要使用例如 list() 函数来转换它。

例题1

代码实现:

while 1:
    try:
        N = int(input())
        for i in range(N):
            l = list(map(int, input().split()))
            print(sum(l))
    except:
        break

讲解:

这段Python代码是一个无限循环(由 while 1: 开始),用于读取输入并计算一系列数字的总和,直到遇到无法处理的异常为止。下面是对代码的详细解释:

  1. while 1:这一行开始一个无限循环,意味着代码会一直运行,直到遇到 break 语句或者程序被外部中断。

  2. try:这一行开始一个 try 块,用于尝试执行一段代码,并捕获可能发生的异常。

  3. N = int(input()):从标准输入读取一行文本,并尝试将其转换为整数。这通常用于获取用户希望处理的数字列表的数量。

  4. for i in range(N):根据上一步获取的 N,这个循环会执行 N 次。

  5. l = list(map(int, input().split())):在循环内部,首先读取一行文本,然后使用 split() 方法将其分割成一个字符串列表。map(int, ...) 将每个字符串转换为整数,然后 list(...) 将结果转换为整数列表。这个列表 l 包含用户输入的一系列数字。

  6. print(sum(l)):计算列表 l 中所有数字的总和,并打印结果。

  7. except:这一行捕获 try 块中可能发生的任何异常。当 try 块中的代码因为某种原因(如输入的不是数字,或者输入为空等)无法正确执行时,会执行 except 块中的代码。

  8. break:当异常发生时,执行 break 语句,跳出 while 循环,终止程序。

例题2

代码实现:

import sys
for line in sys.stdin:
    nums = line.split()
    nums = list(map(int, nums))
    n = nums[0]
    if not n:
        break
    print(sum(nums[-n:]))

讲解:

  1. 导入sys模块:sys模块提供了一些与Python解释器及其环境(如命令行参数)交互的功能。在这里,我们主要使用sys.stdin来读取从标准输入传入的数据。

  2. 读取标准输入: 这行代码开始一个循环,逐行读取从sys.stdin传入的数据。sys.stdin通常是从命令行、文件或管道接收的数据流。

  3. 处理每一行数据: 对于每一行数据,我们使用split()方法将其分割成一个字符串列表。默认情况下,split()方法会根据任何空白字符(如空格、制表符等)来分割字符串。接着,我们使用map()函数将字符串列表nums中的每一个元素转换为整数,并将结果转换回列表。

  4. 获取n的值:我们取转换后的列表的第一个元素(索引为0的元素)作为变量n的值。

  5. 检查n的值: 如果n的值为0(在Python中,0None、空字符串、空列表、空字典等都被视为False),则退出循环。这可能是用于检测输入结束的一个条件。

  6. 计算并打印结果: 最后,我们使用切片nums[-n:]来获取列表nums中的最后n个元素,并使用sum()函数计算这些元素的和。然后,我们将这个和打印到标准输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/545353.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

理解计算中的随机性与伪随机性:Avi Wigderson的理论计算科学贡献

目录 前言1 随机性和伪随机性在计算中的角色2 随机性的动态理解3 伪随机性的应用4 理论到实践的应用结语 前言 近期,普林斯顿大学数学教授Avi Wigderson荣获了2023年图灵奖,以表彰他在理论计算机科学领域的杰出贡献。他的研究聚焦于计算复杂性理论&…

ODI(境外投资备案)作用、类别和申请流程详解

中国企业越来越多地选择在境外进行投资,而国家相关部门也出台了多项政策以规范这一行为。在进行海外投资前,企业必须在政策指导下进行合法操作并办理相应手续,其中ODI(境外投资备案)是其中一种最常见的方式之一。 以…

太好玩了,我用 Python 做了一个 ChatGPT 机器人

毫无疑问,ChatGPT 已经是当下编程圈最火的话题之一,它不仅能够回答各类问题,甚至还能执行代码! 或者是变成一只猫 因为它实在是太好玩,我使用Python将ChatGPT改造,可以实现在命令行或者Python代码中调用。…

华为昇腾AI芯片加持,9.1k Star 的 Open-Sora-Plan,国产Sora要来了吗

Aitrainee | 公众号:AI进修生 哇,今天Github趋势榜第一啊,为了重现Sora,北大这个Open-Sora-Plan,希望通过开源社区力量的复现Sora,目前已支持国产AI芯片(华为昇腾),这回不用被卡脖子…

LoRa无线电机温振传感器,FlexLua低代码技术助力快速实现。

在物联网时代,无线传感技术的应用愈发广泛。其中,LoRa(长距离低功耗无线技术)作为一种适用于远距离、低功耗的通信技术,被广泛应用于各种物联网场景。而结合温度和振动传感技术,能够构建出用于监测机器状态…

UE5学习日记——制作多语言版本游戏,同时初步学习UI制作、多语言化、控制器配置、独立进程测试、打包配置和快速批量翻译等

所有的文本类,无论变量还是控件等都能实现本地化,以此实现不同语言版本。 在这里先将重点注意标注一下: 所有文本类的变量、控件等都可以多语言;本地化控制板中收集、编译时,别忘了编译这一步;支持批量复制…

【蓝桥杯 2020 省 A2】门牌制作 题解(Word+Excel+提交答案)

问题描述 小蓝要为一条街的住户制作门牌号。 这条街一共有2020位住户,门牌号从1到2020编号。 小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1…

802.1X认证原理

IEEE802 LAN/WAN委员会为解决无线局域网网络安全问题,提出了802.1X协议。后来,802.1X协议作为局域网接口的一个普通接入控制机制在以太网中被广泛应用,主要解决以太网内认证和安全方面的问题。 802.1X协议是一种基于接口的网络接入控制协议。…

python的算术运算符

python常用算术运算符代码如下: #算术运算符操作 x 10 y 20 z 30 #加法运算 a x y print("a的值为:", a) #减法运算 a x - y print("a的值为:", a) #乘法运算 a x*y print("a的值为:", a) …

FFmpeg: 自实现ijkplayer播放器--06封装打开和关闭stream

文章目录 流程图stream openstream close流程图 stream open 初始化SDL以允许⾳频输出;初始化帧Frame队列初始化包Packet队列初始化时钟Clock初始化音量创建解复用读取线程read_thread创建视频刷新线程video_refresh_threadint FFPlayer::stream_open(const char

LangChain简明讲义:从0到1构建LLM应用程序

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

实习僧网站的实习岗位信息分析

目录 背景描述数据说明数据集来源问题描述分析目标以及导入模块1. 数据导入2. 数据基本信息和基本处理3. 数据处理3.1 新建data_clean数据框3.2 数值型数据处理3.2.1 “auth_capital”(注册资本)3.2.2 “day_per_week”(每周工作天数&#xf…

Open3D(C++) 0~1归一化到0~255

目录 一、算法原理二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 0-1归一化到0~255的计算原理如下: g ′ = 255 ∗

探索分布式技术--------------注册中心zookeeper

目录 一、ZooKeeper是什么 二、ZooKeeper的工作机制 三、ZooKeeper特点 四、ZooKeeper数据结构 五、ZooKeeper应用场景 5.1统一命名服务 5.2统一配置管理 5.3统一集群管理 5.4服务器动态上下线 5.5软负载均衡 六、ZooKeeper的选举机制 6.1第一次启动选举机制 6.2非…

火绒安全的用法

火绒安全软件是一款综合性的电脑安全防护工具,提供了病毒查杀、系统防护、网络安全等多种功能,以帮助用户保护电脑免受恶意软件和网络威胁的侵害。以下是火绒安全软件的一些主要用法: 病毒查杀:火绒安全软件提供全盘查杀、快速查杀…

Ubuntu20.04版本部署MySQL8.0关闭库名表名区分大小写和自定义数据目录(datadir)路径

本篇文章记录关闭数据库表名库名区分大小写和设置自定义数据目录,安装时建议一个一个步骤进行,这样比较容易成功,下面是设置关闭区分表名库名大小写的。 一、关闭库名表名区分大小写 1、先安装数据库 步骤如下: # 第一步:更新…

C++ 红黑树模拟实现

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:C知识分享⏪   🚚代码仓库:C高阶🚚   🌹关注我🫵带你学习更多C知识   🔝🔝 前言 前面我们实现了AVL树,发明AVL树…

通过腾讯云搭建电商demo的详细操作过程(建站系统 保姆级指导,巨详细)

前言:电商demo选择:使用了litemall。 litemall Spring Boot后端 Vue管理员前端 微信小程序用户前端 Vue用户移动端 代码地址可以是:https://gitee.com/linlinjava/litemall,网上也有许多其他人建的仓库,使用哪个都…

php弹幕播放器源码 支持对接苹果cms接口 蓝光json接口

弹幕播放器源码支持对接苹果cms接口蓝光json接口,里面已经有一条json付费接口,秒解腾讯爱奇艺等等各大平台的视频,弹幕系统可投放暂停广告,跑马灯广告等。 1.将播放器源码上传至服务器 2.你的域名/dmku/install/index.php进行安…

Redis入门到通关之Set命令

文章目录 ⛄ 概述⛄ Set类型的常见命令⛄RedisTemplate API❄️❄️ 添加Set缓存(值可以是一个,也可是多个)❄️❄️设置过期时间(单独设置)❄️❄️根据key获取Set中的所有值❄️❄️根据value从一个set中查询,是否存在❄️❄️获取Set缓存的长度❄️❄️移除指定的…