多层嵌套可迭代列表的剥皮函数

python中很多时候可能会遇到多层嵌套可迭代列表如下:

   list1 = [11, 22, [33, 44, [55, 66]]]
   list2 = [11, 22, [33, 44]]

其中我们想要的结果只是一个所有的结果列表而已.此时就需要一个剥皮函数,把嵌套的元素全部剥离出来,放入一个列表中(递归实现).
实现函数如下:

  def f(x, ret=None):
        # 把上一次的结果传递过来
        if not ret:
                ret = []
        for i in x:
                if isinstance(i, list):
                        # 如果i为列表,则返回继续处理,且把现在的处理结果传递回去
                        f(i, ret)
                    else:
                        ret.append(i)
            # 最终返回所有的元素
            return ret   

第二种方法:

# 第二种方法
def f2(x):
    ret = []
    for m in x:
        if isinstance(m, list):
                    # 进行递归剥皮将列表挨个递归添加到ret列表中
                        # 因为f2函数最终返回的是一个列表,所以不管多少层f2(m)将始终是一个列表
                        # 循环将元素加入ret列表中
            for n in f2(m):
                ret.append(n)
        else:
            ret.append(m)
    return ret

原文地址:https://blog.51cto.com/smly1989/2402275

时间: 2024-10-29 04:25:09

多层嵌套可迭代列表的剥皮函数的相关文章

关于微信小程序多层嵌套渲染列表以及嵌套列表中数据的获取

起因:意图是想实现类似于安卓viewpager那样的效果,想到了用微信小程序的swiper组件,但如果每个swiper-item里都只用一个wx:for来渲染数据的话实在是太慢了,就想到多层嵌套数据渲染来提高效率. 直接上代码 wxml: <view wx:for="{{one}}" wx:key="id"> <view>----{{item.name}}----</view> <view wx:for="{{it

js解析多层嵌套的json,取出所有父元素属性和遍历所有子元素

已知一个多层嵌套的json,取出所有父元素和子元素的id值 思路:因为不知道到底嵌套了多少层,递归有可能造成栈溢出.查询时间特别久的问题 所以先查询一次,判断是否有子节点,如果有,取出子节点并到父节点上,并动态更改数据长度,这样无限循环处理json取出所有id menuIdInit () { var _this = this; var _menu = _this.menus; var menuId = []; var len = _menu.length; for(var i = 0; i <

使用jsonpath解析多层嵌套的json响应信息

Python自带的json库可以把请求转为字典格式, 但在多层嵌套的字典中取值往往要进行多次循环遍历才能取到相应的数据, 如: res_dict = { "code": 0, "msg": "成功", "data": { "users": [ {"name": "张三", "gender": "male", "age&

XStream--&gt;别名;元素转属性;去除集合属性(剥皮);忽略不需要元素

--->清单: City.java Province.java TestXStream.java 4个XStream方法的效果图 javabean-->City.java 1 package xstream; 2 3 public class City { 4 private String name; 5 private String description; 6 7 public String getName() { 8 return name; 9 } 10 public void set

Less-css扩展指定多层嵌套选择器样式

//扩展Extend Use Method:以在study上扩展指定多层嵌套选择器样式 //Share style .test{ font-size:18px; color:#ffffff; ul{ width:100px; height:50px; li{ float:left; margin-right:10px; width:50px; height:50px; } } } //grammar 1 .study{ &:extend(.test ul li); } //grammar 2 .

多层嵌套ajax同步

方式一: $.ajax({ type : "post", url : "user/add", data : data, async : false, //必须为false success : function(para){ para= eval("(" + para+ ")"); alert(para) } }); 方式二(JQ): $.ajaxSetup({ async : false });//为全局变量,必须加,否则同步

asp.net提取多层嵌套json数据的方法

public string GetJsonValue(JEnumerable<JToken> jToken,string key) { IEnumerator enumerator = jToken.GetEnumerator(); while (enumerator.MoveNext()) { JToken jc = (JToken)enumerator.Current; if (jc is JObject||((JProperty)jc).Value is JObject) { retur

Java中迭代列表中数据时几种循环写法的效率比较

Java中经常会用到迭代列表数据的情况,本文针对几种常用的写法进行效率比较.虽然网上已经有了类似的文章,但是对他们的结论并不认同. 常见的实现方法: 1.for循环: [java] view plaincopyprint? for(int i = 0; i < list.size(); i++) for(int i = 0, size = list.size(); i < size; i++) 一般人都会认为第二种写法效率高. 2.foreach: [java] view plaincopyp

SAX解析多层嵌套XML

最近工程需要解析多层嵌套XML,没有找到合适的公共解析的,要是一个类自己对应写一个解析方法,岂不累死,于是自己写了个通用的解析类.现在还不是很完善,对子类的解析需要提前指定好子类不能动态解析. 我用的是DefaultHandler来处理XML,里面方法执行过程是 public void startDocument() throws SAXException 第一个执行方法. public void startElement(String uri, String localName, String