更改未知初始形状列表的所有值

我想要的是用未知的初始形状更改列表中的所有元素,所以我创建了这个辅助函数,但是有没有更好(更短)的方法,或者一个内置的方法来做到这一点?


还有另一个问题,哪里是存储这样一个函数的最佳位置 >if< 没有内置函数,而不是将它复制粘贴到每个文件或项目中



def getNextList():

    yield [1]

    yield [[1,2],3]

    yield [[1,2,[3]], [4,5],6]


def change(next_list, function):

    for i, e in enumerate(next_list):

        if(isinstance(e, int)):

            next_list[i] = function(next_list[i])

        else: change(e, function)


for next_list in getNextList():

    change(next_list, lambda x: x+1)

    print(next_list)

所需的输出:


 [2] 

 [[2, 3], 4] 

 [[2, 3, [4]], [5, 6], 7]

编辑:@Colin Schoen 不是你标记问题的重复,因为迭代两次只会给我一个错误


我想我发布的解决方案或@blhsing 的版本确实更短,是该特定问题的唯一解决方案,但如果我坚持下去,有什么方法可以在不同项目中使用该功能而不复制它?


慕莱坞森
浏览 163回答 1
1回答

慕少森

您可以change改为返回一个生成器表达式,以便它可以使用递归调用的返回值:def change(next_list, function):&nbsp; &nbsp; return (list(change(e, function)) if isinstance(e, list) else function(e) for e in next_list)以便:for changed_list in change(getNextList(), lambda x: x+1):&nbsp; &nbsp; print(changed_list)输出:[2][[2, 3], 4][[2, 3, [4]], [5, 6], 7]至于问题的第二部分,您可以将此函数存储在一个单独的模块中,例如utils.py,在作为PYTHONPATH环境变量一部分的目录中,以便您的任何项目都可以简单from utils import change地使该函数在命名空间中可用.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python