将每个嵌套列表作为arg传递给map

时间:2016-01-23 00:15:29

标签: python-2.7

我有一个嵌套列表如下:

[[u'56', u'99', u'160'], [u'74', u'113', u'169'], [u'92', u'127', u'177'], [u'110', u'142', u'186'], [u'128', u'156', u'195'], [u'146', u'170', u'203'], [u'165', u'184', u'212'], [u'183', u'198', u'220'], [u'201', u'212', u'229'], [u'219', u'227', u'238'], [u'237', u'241', u'246']]

我想将每个列表作为序列传递给以下map函数:

map(None, nested_list1, nested_list2 ...]

这样,我得到3个列表,其中,第一个列表包含所有嵌套列表中的第一个元素,第二个列表包含所有嵌套列表中的第二个元素。

到目前为止,经过多次尝试,我提出了以下代码(它不涉及map())。

first_list = [each[0] for each in nested_list]
second_list = [each[1] for each in nested_list]
third_list = [each[1] for each in nested_list]

我认为如果使用map(),可以将其制作成一行。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你想要的是zip,但你可以使用map来完成,只需使用*list_of_lists进行转置:

a, b, c = map(None,*l)

如果你想要列表,你还必须映射到列表:

map(None,*l)

你真的应该使用zip:

a,b,c = map(list,zip(*l))

两者都将在python 2中提供相同的输出:

In [19]: a,b,c = map(list,map(None,*l))
In [20]: print a
[u'56', u'74', u'92', u'110', u'128', u'146', u'165', u'183', u'201', u'219', u'237']

In [21]: print b
[u'99', u'113', u'127', u'142', u'156', u'170', u'184', u'198', u'212', u'227', u'241']

In [22]: print c
[u'160', u'169', u'177', u'186', u'195', u'203', u'212', u'220', u'229', u'238', u'246']
In [23]: a,b,c = map(list, zip(*l))

In [24]: print a
[u'56', u'74', u'92', u'110', u'128', u'146', u'165', u'183', u'201', u'219', u'237']

In [25]: print b
[u'99', u'113', u'127', u'142', u'156', u'170', u'184', u'198', u'212', u'227', u'241']

In [26]: print c
[u'160', u'169', u'177', u'186', u'195', u'203', u'212', u'220', u'229', u'238', u'246']

map方法无法使用python3。