Python 映射 list

本文介绍了Python中的List解析技术,展示了如何通过简洁的语法对列表进行处理,并提供了具体的代码实例,包括利用多变量赋值和字符串格式化来遍历字典。
Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 list。


1. List 解析介绍

>>> li = [1, 9, 8, 4]
>>> [elem*2 for elem in li]      (1)
[2, 18, 16, 8]
>>> li                           (2)
[1, 9, 8, 4]
>>> li = [elem*2 for elem in li] (3)
>>> li
[2, 18, 16, 8]

(1)  为了便于理解它,让我们从右向左看。li 是一个将要映射的 list。Python 循环遍历 li 中的每个元素。对每个元素均执行如下操作:首先临时将其值赋给变量 elem,然后 Python 应用函数 elem*2 进行计算,最后将计算结果追加到要返回的 list 中。
(2)  需要注意是,对 list 的解析并不改变原始的 list。
(3)  将一个 list 的解析结果赋值给对其映射的变量是安全的。不用担心存在竞争情况或任何古怪事情的发生。Python 会在内存中创建新的 list,当对 list 的解析完成时,Python 将结果赋给变量。


让我们回过头来看看位于 第 2 章 的函数 buildConnectionString 对 list 的解析:

["%s=%s" % (k, v) for k, v in params.items()]

首先,注意到你调用了 dictionary params 的 items 函数。这个函数返回一个 dictionary 中所有数据的 tuple 的 list。


2. keys, values  和  items  函数

>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> params.keys()   (1)
['server', 'uid', 'database', 'pwd']
>>> params.values() (2)
['mpilgrim', 'sa', 'master', 'secret']
>>> params.items()  (3)
[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]

(1)  Dictionary 的 keys 方法返回一个包含所有键的 list。这个 list 没按 dictionary 定义的顺序输出 (记住,元素在 dictionary 中是无序的),但它是一个 list。
(2)  values 方法返回一个包含所有值的 list。它同 keys 方法返回的 list 输出顺序相同,所以对于所有的 n,params.values()[n] == params[params.keys()[n]] 。
(3)  items 方法返回一个由形如 (key,value) 组成的 tuple 的 list。这个 list 包括 dictionary 中所有的数据。
现在让我们看一看 buildConnectionString 做了些什么。它接收一个 list,params.items(),通过对每个元素应用字符串格式化将其映射为一个新 list。这个新 list 将与 params.items() 一一对应:新 list 中的每个元素都是 dictionary params 中的一个键-值对构成的的字符串。


3.  buildConnectionString  中的  list 解析

>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> params.items()
[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]
>>> [k for k, v in params.items()]                (1)
['server', 'uid', 'database', 'pwd']
>>> [v for k, v in params.items()]                (2)
['mpilgrim', 'sa', 'master', 'secret']
>>> ["%s=%s" % (k, v) for k, v in params.items()] (3)
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']

(1)  请注意我们正在使用两个变量对 list params.items() 进行遍历。这是多变量赋值的另一种用法。params.items() 的第一个元素是 ('server', 'mpilgrim'),所以在 list 解析的第一次遍历中,k 将为 'server',v 将为 'mpilgrim'。在本例中,我们忽略了返回 list 中 v 的值,而只包含了 k 的值,所以这个 list 解析最后等于 params.keys()。
(2)  这里我们做着相同的事情,但是忽略了 k 的值,所以这个 list 解析最后等于 params.values()。
(3)  用一些简单的 字符串格式化将前面两个例子合并起来 ,我们就得到一个包括了 dictionary 中每个元素的 key-value 对的 list。这个看上去有点像程序的输出结果,剩下的就只是将这个 list 中的元素接起来形成一个字符串了。
<think>我们被要求回答关于Pythonmap函数的使用方法和示例。根据引用资料,map函数是Python的内置函数,它接受一个函数和一个可迭代对象作为参数,将函数应用于可迭代对象的每个元素,并返回一个迭代器(Python3.x)或列表(Python2.x)。我们将按照以下结构回答:1.解释map函数的基本用法和参数。2.提供使用map函数的示例,包括使用普通函数和lambda函数。3.讨论map函数与filter函数的区别(因为引用中提到了)。4.提及map函数在Python2和Python3中的不同。同时,我们需要注意:-行内数学表达式用$...$(但本问题不涉及数学公式,所以可能不需要) -独立公式单独成段(同样,可能不需要) -使用中文回答-生成相关问题引用资料:[^1]:介绍了map函数的基本概念:接受一个函数和一个序列,将函数映射到序列的每个元素。[^2]:提到了map函数和filter函数的区别。 [^3]:提供了map函数使用普通函数和lambda函数的示例,以及多个序列的示例。[^4]:提到了在Python2中map函数在处理不同长度序列时的行为(用None补齐),而Python3不再支持(实际上Python3中map函数在长度不一致时会以最短的为准)。 [^5]:给出了map函数结合lambda函数的简单示例。根据以上,我们组织回答。</think>### Python map函数使用详解 `map()`是Python的内置高阶函数,用于对可迭代对象中的每个元素应用指定函数,返回一个迭代器对象(Python 3.x)或列表(Python 2.x)。 #### 基本语法 ```python map(function, iterable, ...) ``` - **function**: 要应用的函数(可以是普通函数、lambda函数或内置函数) - **iterable**: 一个或多个可迭代对象(如列表、元组等) - 返回值:Python 3.x返回`map`迭代器对象,可通过`list()`转换为列表 #### 核心特性 1. **惰性求值**:Python 3中返回迭代器而非立即计算结果,节省内存[^3] 2. **多参数支持**:可同时处理多个可迭代对象(长度不同时以最短为准)[^4] 3. **函数式编程**:常与`lambda`表达式结合实现简洁操作[^5] #### 使用示例 **示例1:基本数值运算** ```python # 计算平方 def square(x): return x ** 2 print(list(map(square, [1, 2, 3]))) # 输出: [1, 4, 9] # 使用lambda简化 print(list(map(lambda x: x+1, [5, 6, 7]))) # 输出: [6, 7, 8] ``` **示例2:多序列操作** ```python # 两个列表元素相加 list1 = [1, 3, 5] list2 = [2, 4, 6] result = map(lambda x, y: x + y, list1, list2) print(list(result)) # 输出: [3, 7, 11] ``` **示例3:类型转换** ```python # 字符串转整数 str_nums = ['10', '20', '30'] int_nums = map(int, str_nums) print(list(int_nums)) # 输出: [10, 20, 30] # 元组转字符串 coordinates = [(1,2), (3,4), (5,6)] str_coords = map(lambda point: f"({point[0]},{point[1]})", coordinates) print(list(str_coords)) # 输出: ['(1,2)', '(3,4)', '(5,6)'] ``` #### 与filter()的区别 | 特性 | map() | filter() | |--------------|--------------------------------|------------------------------| | **功能** | 转换所有元素 | 筛选满足条件的元素 | | **返回值** | 函数处理结果 | 原始元素 | | **示例** | `map(lambda x: x*2, [1,2,3])` | `filter(lambda x: x>2, [1,2,3])` | | **结果** | `[2,4,6]` | `[3]` | #### 注意事项 1. Python 3中需显式转换为列表:`list(map(...))` 2. 当可迭代对象长度不一致时,以最短对象为准[^4] 3. 复杂操作建议使用列表推导式(可读性更好) ```python # 等价于 map(lambda x: x.upper(), ['a','b']) [u.upper() for u in ['a','b']] ``` #### 性能场景 - 适合处理大型数据集(迭代器节省内存) - 需应用相同操作到整个集合时 - 函数式编程范式实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值