Python如何拉平(flatten)嵌套列表(nested list)--(递归生成器)

有时候会用到嵌套的列表(list),比如
[python] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. [12, [34, [56]], ["abc""def"]]    
 如果将嵌套的列表拉平(flatten)呢?变成:
[python] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. [123456"abc""def"]    

方法有很多,目前了解到的各方面都比较好,也很pythonic的方法是:
[python] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. def flatten(l):    
  2.     for el in l:    
  3.         if hasattr(el, "__iter__"and not isinstance(el, basestring):    
  4.             for sub in flatten(el):    
  5.                 yield sub    
  6.         else:    
  7.             yield el    

[python] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. l = [12, [34, [56]], ["abc""def"]]    
  2. l2 = [x for x in flatten(l)]    
  3. print l2    
  4. #[1, 2, 3, 4, 5, 6, "abc", "def"]    

没有更多推荐了,返回首页