如何到达随机嵌套列表中未列出的每个元素?

2024-04-20 04:41:37 发布

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

假设有如下列表,请注意这是一个任意列表,以证明该列表包含具有字符串/数值的完全随机列表:

[[["1"],"1"],["2",[["123",[[["23"]]],23],[12.3,"23"]]],[["5"],"1","1"]]

我想得到列表中的每一项,但我只想得到数字或字符串,而不是列表。比方说,我创建了一个函数,它只接受字符串、整数和浮点,而不接受列表。我想用这个函数。你知道吗

我想创建相同的列表,但基于函数的输出使用不同的对象。假设函数将字符串转换为数值。我想创建一个这样的列表:

[[[1],1],[2,[[123,[[[23]]],23],[12.3,23]]],[[5],1,1]]

我想了想,却找不到答案。我该怎么做?你知道吗


Tags: 对象函数字符串答案证明列表数字整数
2条回答

下面是一个类似于嵌套^{}的非常简单的尝试的函数:

def map_nested(fnc, l):
    try: 
        return fnc(l)
    except:
        return [map_nested(fnc, sub) for sub in l]

>>> l = [[["1"],"1"],["2",[["123",[[["23"]]],23],[12.3,"23"]]],[["5"],"1","1"]]
>>> map_nested(float, l)
[[[1.0], 1.0], [2.0, [[123.0, [[[23.0]]], 23.0], [12.3, 23.0]]], [[5.0], 1.0, 1.0]]

它将提供的函数fnc应用于l中的所有项,这些项是该函数(或l本身)的有效参数,并尝试迭代其他项。你知道吗

您可能希望递归地遍历整个结构,并存储结果或在结果上调用函数。它看起来像这样:

sample = [[["1"],"1"],["2",[["123",[[["23"]]],23],[12.3,"23"]]],[["5"],"1","1"]]
def traverse(l, f):
    result = []
    for item in l:
        if isinstance(item, list):
            result.append(traverse(item))
        else:
            result.append(f(item))
    return result

相关问题 更多 >