如何使用两层列表推导式展平包含嵌套结构的字符串列表
Python嵌套列表展平问题修复
问题原因
list.append()方法的返回值为None,你原代码的列表推导式实际在收集所有append操作的返回值,因此得到全是None的嵌套列表- 列表推导式的设计目的是生成新列表,不适合用来执行修改外部变量这类带副作用的操作,不符合Python语法设计的最佳实践
修复方案
两层列表推导式实现(符合需求的最优写法)
这种写法无需额外定义外部临时列表,直接生成展平后的结果:
tweet_list=['!iniciamos', 'la', ['mi', 'banco', 'banco', 'señal'], 'con', 'nuestro', 'invitado', 'especial'] flated_list = [ sub_elem for elem in tweet_list for sub_elem in (elem if isinstance(elem, list) else [elem]) ]
执行后flated_list的结果为:['!iniciamos', 'la', 'mi', 'banco', 'banco', 'señal', 'con', 'nuestro', 'invitado', 'especial']
也可以写成单行形式:
flated_list = [sub_elem for elem in tweet_list for sub_elem in (elem if isinstance(elem, list) else [elem])]
普通循环实现(可读性更高,适合复杂嵌套场景扩展)
如果后续可能遇到更深层的嵌套,用普通循环的写法更容易修改扩展:
tweet_list=['!iniciamos', 'la', ['mi', 'banco', 'banco', 'señal'], 'con', 'nuestro', 'invitado', 'especial'] flat = [] for elem in tweet_list: if isinstance(elem, list): flat.extend(elem) else: flat.append(elem)
内容的提问来源于stack exchange,提问作者GonzaloMoreno
相关产品推荐
相关产品推荐

