当前位置: 首页 > news >正文

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:breakprint(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()函数计算这些元素的和。然后,我们将这个和打印到标准输出。

相关文章:

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

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

公网环境下如何端口映射?

公网端口映射是一种网络技术,它允许将本地网络中的设备暴露在公共互联网上,以便能够从任何地方访问这些设备。通过公网端口映射,用户可以通过互联网直接访问和控制局域网中的设备,而无需在本地网络中进行复杂的配置。 公网端口映射…...

7-36 输入年份和月份

输入一个年份和月份,输出这个月的天数。 输入格式: 输入年份year和月份month,年份和月份中间用一个空格隔开。 输出格式: 输入year年的month月对应的天数。 输入样例: 2000 2输出样例: 29输入样例: 1900 2输出样例: 28输入样例: 1900 6输出样例…...

Linux C++ 023-类模板

Linux C 023-类模板 本节关键字:Linux、C、类模板 相关库函数:getCapacity、getSize 类模板语法 类模板的作用:建立一个通用的类,类中的成员 数据类型可以不具体制定, 用一个虚拟的类型代表语法: templa…...

Android图形显示架构概览

图形显示系统作为Android系统核心的子系统,掌握它对于理解Android系统很有帮助,下面从整体上简单介绍图形显示系统的架构,如下图所示。 这个框架只包含了用户空间的图形组件,不涉及底层的显示驱动。框架主要包括以下4个图形组件。…...

算法学习17:背包问题(动态规划)

算法学习17:背包问题(动态规划) 文章目录 算法学习17:背包问题(动态规划)前言一、01背包问题:1.朴素版:(二维)2.优化版:(一维&#xf…...

axios-mock-adapter使用

文章目录 1. 安装 axios-mock-adapter2. 引入所需的库3. 创建一个模拟适配器实例4. 定义模拟响应5. 在你的代码中使用 axios6. 在测试或开发完成后清理模拟 axios-mock-adapter 是一个用于模拟 axios HTTP 请求的库。它允许你在测试或开发过程中,为 axios 实例提供…...

基于单片机的家用无线火灾报警系统设计

摘 要:针对普通家庭的火灾防范需求,设计一种基于单片机的家用无线智能火灾报警系统。该系统主要由传感器、单片机、无线通信模块、GSM 模块、输入显示模块、声光报警电路和GSM 报警电路组成。系统工作时,检测部分单片机判断是否发生火灾,并将信息通过无线通信模块传…...

LangChain:索引(Indexes)--基础知识

引言 在当今信息爆炸的时代,如何高效地获取、处理和利用信息成为了关键。LangChain,作为一种先进的语言模型框架,提供了强大的索引功能,帮助用户更好地管理和应用文本数据。本文将详细介绍LangChain索引中的几个核心组件&#xf…...

Cortex-M4架构

第一章 嵌入式系统概论 1.1 嵌入式系统概念 用于控制、监视或者辅助操作机器和设备的装置,是一种专用计算机系统。 更宽泛的定义:是在产品内部,具有特定功能的计算机系统。 1.2 嵌入式系统组成 硬件 ①处理器:CPU ②存储器…...

对称排序(蓝桥杯)

文章目录 对称排序问题描述模拟 对称排序 问题描述 小蓝是一名软件工程师,他正在研究一种基于交换的排序算法,以提高排序的效率。 给定一个长度为 N 的数组 A,小蓝希望通过交换对称元素的方式对该数组进行排序。 具体来说,小蓝…...

React - 你使用过高阶组件吗

难度级别:初级及以上 提问概率:55% 高阶组件并不能单纯的说它是一个函数,或是一个组件,在React中,函数也可以做为一种组件。而高阶组件就是将一个组件做为入参,被传入一个函数或者组件中,经过一定的加工处理,最终再返回一个组件的组合…...

【C语言】结构体、枚举、联合(自定义类型)

文章目录 前言一、结构体1.结构体的声明2.结构体的自引用3.结构体变量的定义和初始化4.结构体成员的访问5.结构体内存对齐(重点)6.#pragma修改默认对齐数7.结构体传参 二、位段1.位段的声明2.位段的内存分配3.位段的跨平台问题 三、枚举四、联合 &#x…...

用vue.js写案例——ToDoList待办事项 (步骤和全码解析)

目录 一.准备工作 二.编写各个组件的页面结构 三.实现初始任务列表的渲染 四.新增任务 五.删除任务 六.展示未完成条数 七.切换状态-筛选数据 八.待办事项(全)代码 一.准备工作 在开发“ToDoList”案例之前,需要先完成一些准备工作&a…...

提高大型语言模型 (LLM) 性能的四种数据清理技术

原文地址:four-data-cleaning-techniques-to-improve-large-language-model-llm-performance 2024 年 4 月 2 日 检索增强生成(RAG)过程因其增强对大语言模型(LLM)的理解、为它们提供上下文并帮助防止幻觉的潜力而受…...

Rust 练手小项目:猜数游戏

好久没写 Rust 了,参考《Rust 程序设计语言》写了一下猜数游戏。差不多 40 行,感觉写起来真舒服。 use rand::Rng; use std::{cmp::Ordering, io};fn main() {let secret_number rand::thread_rng().gen_range(0..100);println!("[*] Guess the n…...

蓝桥杯物联网竞赛_STM32L071_16_EEPROM

仍然是没有考过的知识点 朴素的讲就是板子中一块不会因为断电重启而导致数值初始化的一片地址 要注意的是有时候容易把板子什么写错导致板子什么地址写坏了导致程序无法烧录,这个时候记得一直按flash键烧录,烧录时会报错,点击确定&#xff0…...

复习知识点整理

零碎语法 1.导入某个文件夹的index文件,index可以省略(这里导入的是router和store文件下的index.js文件) 2.路由懒加载 this 1.在vue文件中使用router\store对象时 this:普通函数的this指向vue实例对象(在没有明确指向的时候…...

7款公司电脑监控软件

7款公司电脑监控软件 研究证明,人们在家办公的效率比在办公室办公的效率低一半,其中原因是缺少监督,即便在公司办公,还存在员工偷闲的时刻,比如聊天、浏览无关网站、看剧、炒股等,企业想提高员工的工作效率…...

服务器 安装1Panel服务器运维管理面板

服务器 安装1Panel服务器运维管理面板 SSH链接服务器安装1Panel 出现此提示时输入目标路径,须以“/”开头,默认:/opt,本例:/www。 出现此提示时输入目标端口,须未被使用的端口,默认&#xff1…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...