首页 > 深入Python > 开始了解Python > 映射列表 | << >> | ||||
diveintopython.org Python for experienced programmers |
Python的强大特性之一是列表理解(list comprehension),它提供一种紧凑的方法,可以通过对列表的每个元素应用一个函数,从而将一个列表映射为另一个列表。
>>> 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]
首先,注意到你调用了字典 params 的 items 函数。这个函数返回一个字典中所有数据的元组的列表。
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.keys() ['server', 'uid', 'database', 'pwd'] >>> params.values() ['mpilgrim', 'master', 'sa', 'secret'] >>> params.items() [('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]
现在让我们看一看 buildConnectionString 做了些什么。它接收一个列表,params.items(),通过对每个元素应用字符串格式化将其映射为一个新列表。这个新列表将拥有与 params.items() 一样的元素数量,但在新列表中的每个元素都将是包括了从字典 params 来的一个键字和其相连的值的字符串。
例 1.33. 在 buildConnectionString 中的列表理解,一步接一步
>>> 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 9 10 11 12 13 14 15 |
连接列表和分割字符串 |