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

时间:2019-03-02 00:22:21

标签: python list

我想要的是更改列表中具有未知初始形状的所有元素,所以我做了这个辅助函数,但是 有更好的(更短的)方法,还是内置的方法?

和侧面的另一个问题,在哪里存储这种功能的最佳位置> 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 个答案:

答案 0 :(得分:2)

您可以使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,即可在名称空间中使用此功能。