Python多层嵌套list的递归处理方法(推荐)


Posted in Python onJune 08, 2016

问题:用Python处理一个多层嵌套list

['and', 'B', ['not', 'A'],[1,2,1,[2,1],[1,1,[2,2,1]]], ['not', 'A', 'A'],['or', 'A', 'B' ,'A'] , 'B']

需求1)如何展开成一层?

需求2)如何删除重复的元素? 包括重复的list, 要考虑子list的重复元素删除后造成的子list重复

#!/usr/bin/env python
# -*- coding: utf-8 -*-


def unilist(ll):
  
  """
  功能:用递归方法删除多层列表中重复元素
  """
  
  result = []
  for i in ll:
    if isinstance(i, list):
      if unilist(i) not in result:
        result.append(unilist(i))
    else:
      if i not in result:
        result.append(i)
  return result


def flatten(ll):
  """
  功能:用递归方法展开多层列表,以生成器方式输出
  """
  if isinstance(ll, list):
    for i in ll:
      for element in flatten(i):
        yield element
  else:
    yield ll


testcase= ['and', 'B', ['not', 'A'],[1,2,1,[2,1],[1,1,[2,2,1]]], ['not', 'A', 'A'],['or', 'A', 'B' ,'A'] , 'B']

print unilist(testcase)

print list(flatten(testcase))

运行结果

['and', 'B', ['not', 'A'], [1, 2, [2, 1], [1, [2, 1]]], ['or', 'A', 'B']]

['and', 'B', 'not', 'A', 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 'not', 'A', 'A', 'or', 'A', 'B', 'A', 'B']

以上这篇Python多层嵌套list的递归处理方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
pytorch 修改预训练model实例
Jan 18 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
初学者学习Python好还是Java好
May 26 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Python-嵌套列表list的全面解析
Jun 08 #Python
PYTHON压平嵌套列表的简单实现
Jun 08 #Python
Python用Bottle轻量级框架进行Web开发
Jun 08 #Python
浅谈Python数据类型之间的转换
Jun 08 #Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 #Python
Python while 循环使用的简单实例
Jun 08 #Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 #Python
You might like
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
php数组总结篇(一)
2008/09/30 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
javascript中的return和闭包函数浅析
2014/06/06 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
javascript 实现map集合
2015/04/03 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
20个常用Python运维库和模块
2018/02/12 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
使用python实现学生信息管理系统
2021/02/25 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
新学期国旗下演讲稿
2014/05/08 职场文书
安全承诺书格式
2014/05/21 职场文书
供电工程专业求职信
2014/08/09 职场文书
2014年仓库工作总结
2014/11/20 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL