Python带条件嵌套列表推导式:生成非嵌套列表的方法
问题:将列表中字符串替换为字符ASCII值并避免嵌套列表
在Python 3.7.9中解析包含整数和字符串的列表,需将每个字符串替换为其字符的ASCII值。示例:
- 输入:
operand = [200, 42, 0, 'A', 'BC'] - 期望输出:
operand = [200, 42, 0, 65, 66, 67]
当前使用的嵌套列表推导式:
operand = [[ord(char) for char in data] if type(data) is str else data for data in operand]
但生成了包含整数和嵌套列表的混合列表(如[200, 42, 0, [65], [66, 67]]),希望避免后续扁平化操作,如何用嵌套列表推导式直接生成正确的扁平列表?
解决方案
可以调整列表推导式的层级结构,将字符串的字符直接展开到结果列表中,同时统一处理整数和字符串的遍历逻辑:
operand = [ord(char) for data in operand for char in (data if isinstance(data, str) else [data])]
关键说明:
- 对于每个元素
data:若为字符串,则遍历其每个字符;若为整数,则将其包装成单元素列表,让内层循环仅迭代一次 - 内层循环处理后直接输出单个值(整数或字符的ASCII码),最终生成的是完全扁平的列表,无需后续扁平化操作
- 建议用
isinstance(data, str)替代type(data) is str,前者支持子类类型检查,更符合Python的类型判断规范
测试该代码,输入目标列表后会直接得到期望的扁平结果,完全满足需求。
内容的提问来源于stack exchange,提问作者Chrome58
相关产品推荐
相关产品推荐

