python - 在 Python 中展平嵌套列表
问题描述
我在扁平化 Python 中的嵌套列表部分时遇到了一些困难。这是列表:
[['31', '1'], '32', ['8', '16'], ['1', '3', '12'], ['4', '12'], '32', ['1', '3', '12'], ['4', '12'], '32', ['30', '1', '1']]
我想展平该列表中的任何列表,最终结果如下所示:
['31', '1', '32', '8', '16', '1', '3', '12', '4', '12', '32', '1', '3', '12', '4', '12', '32', '30', '1', '1']
通过查找方法,我尝试了以下代码:
list1 = (list(itertools.chain.from_iterable(list1)))
但是,它不仅会扁平化列表,还会扁平化单个字符串,拆分任何超过 1 个字符的字符串(即 '32' 变为 '3'、'2'),如下所示:
['31', '1', '3', '2', '8', '16', '1', '3', '12', '4', '12', '3', '2', '1', '3', '12', '4', '12', '3', '2', '30', '1', '1']
有没有办法只展平这个列表中的列表而不是单个字符串?抱歉,如果术语不正确,我对操作这种列表不太熟悉。谢谢!
解决方案
arr = [['31', '1'], '32', ['8', '16'], ['1', '3', '12'], ['4', '12'], '32', ['1', '3', '12'], ['4', '12'], '32', ['30', '1', '1']]
def extract(array):
for item in array:
if type(item) in [set, list, tuple]:
yield from extract(item)
else:
yield item
print(list(extract(arr)))
['31', '1', '32', '8', '16', '1', '3', '12', '4', '12', '32', '1', '3', '12', '4', '12', '32', '30', '1', '1']
推荐阅读
- java - 使用 .bat 文件设置 JAVA_HOME 和 MAVEN_HOME
- javascript - 改变传递道具的状态
- python - PCA().fit() 使用错误的轴进行数据输入
- apache - 重新启动apache时出错
- docker - 尝试从 docker 映像运行 wdio 时,在 Jenkins 中未找到模块错误
- google-apps-script - 基于时间的触发器不在带有绑定脚本的模板文档的副本上运行?
- android - Kotlin数组启动后不保存值
- c# - 当焦点丢失时,网格视图中的类型消失了
- sql - SELECT 教程“某些国家/地区有人口”问题中的 SELECT 中缺少国家/地区
- javascript - 用于循环优化的 Javascript