我想要的是用未知的初始形状更改列表中的所有元素,所以我创建了这个辅助函数,但是有没有更好(更短)的方法,或者一个内置的方法来做到这一点?还有另一个问题,哪里是存储这样一个函数的最佳位置 >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地使该函数在命名空间中可用.
添加回答
举报
0/150
提交
取消