在Python中将list.map应用于两个平行列表

2024-04-26 04:07:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个平行的嵌套列表。它们在长度和子长度上总是匹配的。例如:

_list1 = [[1,2,3],[1,2],[1,2,3,4]]
_list2 = [[a,b,c],[a,b],[a,b,c,d]]

现在上述结构无法保证。有可能我会得到一个平面列表,甚至更深的嵌套列表。为此,如果我想对我使用的列表中的每个元素应用一个定义列表.map递归如下:

def ProcessList(_func, _list):
    return map( lambda x: ProcessList(_func, x) if type(x)==list else _func(x), _list )

这样我就可以对未指定的嵌套列表应用单个定义。我怎么能同时做两个列表呢?我想应用一个定义,它将从_list1中获取一个元素,对于_list2中匹配的元素,它将执行一个定义。例如:

def DoSomething(i,j);
    return str(i) + str(j)

因此,如果我将这个定义应用于两个平行的列表,它将返回:

_newList = [[1a,2b,3c],[1a,2b],[1a,2b,3c,4d]]

同样,关键是能够对未指定列表和嵌套列表进行操作。你知道吗


Tags: 元素map列表return定义def结构list
1条回答
网友
1楼 · 发布于 2024-04-26 04:07:49

你的意思是这样的:

>>> def ProcessList(_func, *lists):
...     return map( lambda *xs: ProcessList(_func, *xs) if all(type(x) is list for x in xs) else _func(*xs), *lists )
... 
>>> def DoSomething(*args):
...     return ''.join(map(str, args))
... 
>>> _list1 = [[1,2,3],[1,2],[1,2,3,4]]
>>> _list2 = [['a','b','c'],['a','b'],['a','b','c','d']]
>>> 
>>> print (ProcessList(DoSomething, _list1, _list2))
[['1a', '2b', '3c'], ['1a', '2b'], ['1a', '2b', '3c', '4d']]

相关问题 更多 >