list 是 Python 中使用最频繁的数据类型, 标准库里面有丰富的函数可以使用。
不过,如果把多维列表转换成一维列表(不知道这种需求多不多),还真不容易找到好用的函数,
要知道Ruby、Mathematica、Groovy中可是有flatten的啊。
如果列表是维度少的、规则的,还算好办
例如:
li=[[1,2],[3,4],[5,6]] print ([j for i in li for j in i]) #or from itertools import chain print (list(chain(*li))) #or a=[[1,2],[3,4],[5,6]] t=[] [t.extend(i) for i in a] print (t) #or print (sum(li,[]))
对于复杂一些的,如:li=[1,[2],[[3]],[[4,[5],6]]],上面的方法就不好使了,得换个方法了,
从结构上看像是树状的,很容易联想到了目录的遍历,于是就有了下面的做法:
def flat(tree): res = [] for i in tree: if isinstance(i, list): res.extend(flat(i)) else: res.append(i) return res
另一种思路,嵌套列表无非就是有很多成对的方括号,一维的列表只有一对,把中间的去掉就行了,转换为字符串就好办了:
def flatten(seq): s=str(seq).replace(\'[\', \'\').replace(\']\', \'\') #当然也可以用正则 return [eval(x) for x in s.split(\',\') if x.strip()]
不过,这种做法对于列表中出现包含\"[\"或\"]\"的字符串时就无能为力了,需要改进。
出处:http://www.cnblogs.com/c-hy/archive/2012/09/21/2696703.html
继续阅读与本文标签相同的文章
上一篇 :
钱东奇:AI+服务机器人为未来生活带来无限可能
下一篇 :
C#开发——网站应用微信登录开发
-
《21天学通JavaScript(第5版)》| 每日读本书
2026-05-19栏目: 教程
-
Unity火爆插件Behavior Designer行为树插件学习
2026-05-19栏目: 教程
-
结合 Mybatis,探讨 Oracle 中 in 与 not in 的陷阱
2026-05-19栏目: 教程
-
阿里云文件网关备份
2026-05-19栏目: 教程
-
UITableView 组件化
2026-05-19栏目: 教程
