为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2021-11-23 19:42:40
我想要的是用未知的初始形状更改列表中的所有元素,所以我创建了这个辅助函数,但是有没有更好(更短)的方法,或者一个内置的方法来做到这一点?还有另一个问题,哪里是存储这样一个函数的最佳位置 >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 的版本确实更短,是该特定问题的唯一解决方案,但如果我坚持下去,有什么方法可以在不同项目中使用该功能而不复制它?
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

您可以change改为返回一个生成器表达式,以便它可以使用递归调用的返回值:


def change(next_list, function):

    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):

    print(changed_list)

输出:


[2]

[[2, 3], 4]

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

至于问题的第二部分,您可以将此函数存储在一个单独的模块中,例如utils.py,在作为PYTHONPATH环境变量一部分的目录中,以便您的任何项目都可以简单from utils import change地使该函数在命名空间中可用.


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信