python - 更改未知初始形状列表的所有值
问题描述
我想要的是更改具有未知初始形状的列表中的所有元素,所以我制作了这个辅助函数,但是有没有更好(更短)的方法,或者内置的方法来做到这一点?
还有另一个问题,存储这样一个函数的最佳位置在哪里>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 版本是该特定问题的唯一解决方案,但是如果我坚持下去,那么在不复制的情况下,在不同项目中使用该功能的方法是什么?
解决方案
您可以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
地使此函数在命名空间中可用.
推荐阅读
- node.js - 导入纯Typescript包时找不到模块
- perl - Perl - Slic3r“蜂窝”模式的开源解释
- amazon-ec2 - Kubernetes - 连接跟踪不会将包破坏回原始目标 IP (DNAT)
- office365 - 有没有办法使用 Microsoft Graph 读取和/或更新帐户选项
- python - 为什么我的 matplotlib 图的图例总是被裁剪?
- batch-file - 需要编写一个批处理脚本将单个 EXCEL 文件复制到 EXCEL 文件当前所在的所有子文件夹中
- reactjs - React js 实现 CKeditor 或 Draft
- delphi - 未分配 SOAP 响应类(无)
- python - Python,sqlalchemy:如何提高加密sqlite数据库的性能?
- perl - 打印 grep -c return 时的奇怪输出