我有一个嵌套列表如下:
[[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(),可以将其制作成一行。有什么想法吗?
答案 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。