Python中符合Pythonic规范的按条件动态组合构建序列的方法是什么?
在Python中最贴近该Perl写法逻辑的替代方案是利用列表字面量的可迭代对象解包语法(Python 3.5及以上版本支持),和原代码的写法结构、执行逻辑几乎完全一致:
arr = [ *(['foo'] if foo_defined else []), *(['bar'] if bar_defined else []), *(['baz'] if baz_defined else []), ]
该写法的逻辑和原Perl代码完全对齐:条件成立时解包单元素列表,把对应值加入最终数组;条件不成立时解包空列表,不会新增任何元素,最终数组的元素数量由各个条件的生效情况决定。
如果需要处理的判断条件较多,也可以用可读性更高的列表推导式实现:
arr = [val for val, cond in [ ("foo", foo_defined), ("bar", bar_defined), ("baz", baz_defined) ] if cond]
这种写法新增条件时只需要补充一行(值, 条件)的配对项即可,不需要重复编写解包语法。
内容的提问来源于stack exchange,提问作者planetp
相关产品推荐
相关产品推荐

