首页 > 深入Python > 开始了解Python > 映谢列表 | << >> |
diveintopython.org |
|
Python for experienced programmers |
列表映射是一个非常有用的方法,它是通过对列表的每个元素应用一个函数来转换数据。
例 1.28. 在 buildConnectionString 中的列表映射
["%s=%s" % (k, params[k]) for k in params.keys()]
首先,注意到你调用了字典 params 的 keys 函数。这个函数简单地返回字典中所有关键字的列表。
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.keys() ['server', 'uid', 'database', 'pwd']
这个列表没有特别的顺序(记住,元素在字典中是无序的),但因为它是一个列表,这就意味着你可以映射它。映射是通过循环遍历一个列表,并对每个元素应用一个函数,然后返回一个包含为计算后的值的新列表。
>>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li] [2, 18, 16, 8] >>> li [1, 9, 8, 4]
为了对这一点有一个感性认识,从右向左看它。 li 是一个将要映射的列表。Python循环遍历 li 一次一个元素,临时将每个元素的值赋给变量 elem。然后Python使用函数 elem*2 ,接着将结果追加到返回列表中。 |
|
注意列表映射不改变被映射的列表。 |
现在你应该理解了在 buildConnectionString 中的代码做了什么了。它接收一个列表 params.keys(),然后通过对每个元素应用字符串格式化函数将其映射成一个新列表。新列表将拥有象 params.keys()一样多的元素个数,但是在新列表中的每个元素将包含字典 params 中的键字和它相关的值。
例 1.31. 在 buildConnectionString中的列表映射,step by step
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.keys() ['server', 'uid', 'database', 'pwd'] >>> [k for k in params.keys()] ['server', 'uid', 'database', 'pwd'] >>> [params[k] for k in params.keys()] ['mpilgrim', 'sa', 'master', 'secret'] >>> ["%s=%s" % (k, params[k]) for k in params.keys()] ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
简单的列表映射举例。映射表达式刚好是元素自身,所以这个列表映射返回列表的原封不动的拷贝。它等于 params.keys(). |
|
效难一点的映射。重复遍历 params.keys(),变量 k 按顺序赋与每个元素,映射表达式接收元素然后在字典 params 中查找相应的值。它等于 params.values()。 |
|
用一些简单的字符串格式化将前面两个例子合并起来 ,我们就得到一个键-值对列表。这个看上去有点象程序的输出,剩下的就只是将这个列表中的元素接起来形成一个字符串了。 |
进一步阅读 |
|
« 格式化字符串 | 连接列表和分割字符串 » |