您在这里:首页 > 深入 Python > 原生数据类型 > 映射列表 | << >> | ||||
深入 Python从 Python 新手到专家 |
Python 最强大的功能之一是列表推导式,它提供了一种紧凑的方式,通过对列表的每个元素应用函数,将一个列表映射到另一个列表。
>>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li][2, 18, 16, 8] >>> li
[1, 9, 8, 4] >>> li = [elem*2 for elem in li]
>>> li [2, 18, 16, 8]
以下是您在第 2 章中声明的 buildConnectionString 函数中的列表推导式
["%s=%s" % (k, v) for k, v in params.items()]
首先,请注意您正在调用 params 字典的 items 函数。 此函数返回一个元组列表,其中包含字典中的所有数据。
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.keys()['server', 'uid', 'database', 'pwd'] >>> params.values()
['mpilgrim', 'sa', 'master', 'secret'] >>> params.items()
[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]
现在让我们看看 buildConnectionString 的作用。 它接受一个列表,params.items(),并通过对每个元素应用字符串格式将其映射到一个新列表。 新列表的元素数量与 params.items() 相同,但新列表中的每个元素都是一个字符串,其中包含 params 字典中的键及其关联值。
>>> 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()]['server', 'uid', 'database', 'pwd'] >>> [v for k, v in params.items()]
['mpilgrim', 'sa', 'master', 'secret'] >>> ["%s=%s" % (k, v) for k, v in params.items()]
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
![]() |
请注意,您正在使用两个变量来迭代 params.items() 列表。 这是多变量赋值的另一种用法。 params.items() 的第一个元素是 ('server', 'mpilgrim'),因此在列表推导式的第一次迭代中,k 将获取 'server',v 将获取 'mpilgrim'。 在这种情况下,您忽略了 v 的值,并且只在返回的列表中包含 k 的值,因此此列表推导式最终等效于 params.keys()。 |
![]() |
在这里,您正在做同样的事情,但忽略了 k 的值,因此此列表推导式最终等效于 params.values()。 |
![]() |
将前两个示例与一些简单的字符串格式化相结合,您将获得一个字符串列表,其中包含字典中每个元素的键和值。 这看起来很像程序的输出。 剩下的就是将此列表中的元素连接成一个字符串。 |
<< 格式化字符串 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
连接列表和拆分字符串 >> |