Python展平列表额外维度至一维及嵌套列表去方括号问题咨询
Python嵌套列表展平为一维的方法
问题解答
问题1:移除列表的方括号是否必须先将列表转换为字符串?
不需要。把列表转成字符串再处理是舍近求远的做法,不仅效率低,还容易出问题——比如如果列表元素本身包含方括号字符,会被误处理。直接对列表进行操作才是最可靠的方式。
主问题:移除嵌套列表中的额外方括号(嵌套列表的索引会随内容变化)
示例(已翻译为中文):Words = ['红衬衫', ['小黄人', '敢死队', '炮灰']]
下面提供几种通用方法,不管嵌套列表在哪个位置都能处理:
- 方法一:手动遍历判断(适合单层嵌套)
直接遍历列表元素,遇到子列表就把它的元素合并到结果里,否则直接添加元素:
def flatten_list(lst): result = [] for item in lst: if isinstance(item, list): result.extend(item) else: result.append(item) return result Words = ['红衬衫', ['小黄人', '敢死队', '炮灰']] print(flatten_list(Words)) # 输出: ['红衬衫', '小黄人', '敢死队', '炮灰']
- 方法二:用itertools.chain简化写法
借助标准库的itertools.chain可以更简洁地实现,先把非列表元素包装成单元素列表,再链式合并:
from itertools import chain Words = ['红衬衫', ['小黄人', '敢死队', '炮灰']] flattened = list(chain.from_iterable( item if isinstance(item, list) else [item] for item in Words )) print(flattened) # 输出: ['红衬衫', '小黄人', '敢死队', '炮灰']
- 方法三:递归处理多层嵌套
如果你的列表存在多层嵌套(比如['红衬衫', ['小黄人', ['敢死队', '炮灰']]]),可以用递归深度遍历:
def flatten_deep(lst): result = [] for item in lst: if isinstance(item, list): result.extend(flatten_deep(item)) else: result.append(item) return result # 测试多层嵌套场景 test_list = ['红衬衫', ['小黄人', ['敢死队', '炮灰']]] print(flatten_deep(test_list)) # 输出: ['红衬衫', '小黄人', '敢死队', '炮灰']
内容的提问来源于stack exchange,提问作者Handsome rob
相关产品推荐
相关产品推荐

