总第 116 篇文章,本文大约  1000 字,阅读大约需要 3 分钟

今天介绍和列表相关的两个小技巧:

  • 碾平列表(flatten list),也就是列表里的元素也带有列表的情况;

  • 列表去重,保留原始顺序和不保留顺序的做法


1. 碾平列表

碾平列表(flatten list ),即当列表里面嵌套列表,如何将这些子列表给取出来,得到一个不包含子列表的列表,示例如下:

list1 = [1, [2, [3,4]], 5]=>new_list = [1, 2, 3, 4, 5]

这里介绍 3 种方法,分别如下。

方法1:利用递归的思想,代码如下:

list1 = [1, [2, [3,4]], 5]
res = []def fun(s):for i in s:if isinstance(i, list):fun(i)else:res.append(i)fun(list1)
print(res)

接着是两种比较高级的写法,用 lambda 实现一个匿名函数

方法2:

flat = lambda L: sum(map(flat, L), []) if isinstance(L, list) else [L]print(flat(list1))

方法3:

a = [1, 2, [3, 4], [[5, 6], [7, 8]]]flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]print(flatten(a))

2. 列表去重

列表去重可能会破坏原有的顺序,所以下面分别介绍保留顺序和不保留顺序的做法。

去重,但改变顺序

去重但改变顺序,两种方法

方法1 就是利用 set 进行去重

l1 = ['b','c','d','b','c','a','a']
l2 = list(set(l1))
print l2

方法2 是利用字典的键不重复的特性,将列表的元素作为一个字典的键,然后返回这个字典的所有键,即可实现去重的操作。

l1 = ['b','c','d','b','c','a','a']
l2 = {}.fromkeys(l1).keys()
print l2

去重,不改变顺序

利用 sortedset 方法实现去重并保留原始顺序,这里 sorted 指定排序的规则就是按照原列表的索引顺序

l1 = ['b','c','d','b','c','a','a']
l2 = sorted(set(l1),key=l1.index)
print l2

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

如果觉得不错,在看、转发就是对小编的一个支持!

python技巧(2)--碾平列表和列表去重相关推荐

  1. 【数据结构Python描述】手动实现一个list列表类并分析常用操作时间复杂度

    文章目录 一.使用动态数组实现列表 1. 动态数组概念引入 2. 验证列表实现策略 3. 动态数组算法实现 二.摊销法分析时间复杂度 1. 摊销法使用示例 2. 数组容量指数增长 3. 数组容量等差增 ...

  2. python for 循环中使用 remove 删除列表中的元素

    python for 循环中使用 remove 删除列表中的元素 错误的代码 # !/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- o ...

  3. Python(五)之迭代器和列表解析

    Python迭代器和列表解析 迭代器 例如:In [1]: l1 = [1,2,3,4,5]dir(i1)可以看到内置方法'__iter__'生成一个迭代器:l1.__iter__,或i2 = ite ...

  4. python中append函数合并列表且列表内数字从高到低_35个高级Python知识点总结

    No.1 一切皆对象 众所周知,Java中强调"一切皆对象",但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function) ...

  5. Python(迭代、三元表达式、列表生成、生成器、迭代器)

    迭代 什么是迭代1 重复2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在 ...

  6. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  7. python txt提取特定数据_Python提取列表中的内容 用“python”怎么提取文件里的指定内容?...

    用"python"怎么提取文件里的指定内容? python读取文件内容的方法: 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = ...

  8. Python学习(四)列表与列表操作

    读取列表 列表:由一系列按特定顺序排列的元素组合.Python中使用"[]"表示列表 bicycles = ['trek','cannondale','redline','spec ...

  9. 我的python之路(四):列表

    1.列表是什么 列表是由一系列按照特定顺序排列的元素组成,它可以创建包含字母表中的所有字母.数字0-9或所有家庭成员姓名的列表:也可以将任何东西加入列表中,其中的元素之间可以没有任何关系.鉴于列表通常 ...

最新文章

  1. Spring源码分析【7】-Spring 模板页和JSP文件的编译
  2. mysql 5.6.20安装_Windows下面安装和配置MySQL(5.6.20)
  3. yum 卸载php及依赖包,yum使用指南-软件卸载、安装、更新、获取软件包
  4. 可以免费下载论文的网站
  5. Unmarshalling Error: unexpected element 错误的解决
  6. 杰克逊JSON解析错误-UnrecognizedPropertyException:无法识别的字段,未标记为可忽略[已解决]...
  7. Firefox 密码管理器 Lockbox 推出 Android 版
  8. double类型转integer类型_边坡支挡类型、构造及设计计算,需要的就转走!
  9. 计算机操作系统慕课版(汤小丹)--第一章课后题
  10. 【python】数据挖掘 实验:中国二级城市经纬度聚类分析
  11. 对知识推理的认识的相关论文
  12. h5-video3 解决html5 audio iphone,ipd,safari不能自动播放问题
  13. python识图找图_初探利用Python进行图文识别(OCR)
  14. 张国荣一生57部电影海报全集
  15. AI软件编辑文字时出现“滚滚长江东逝水”解决方法
  16. Java 来判断手机号码是否已经存在例子
  17. 即时通讯 SDK 一对一通讯技术
  18. 将等号作为键值的js字符串转json
  19. 【蓝桥杯】【啊哈!算法】冒泡排序
  20. flask session permanent

热门文章

  1. pbs 支持 java_Linux下Java安装与配置
  2. c语言程序设计k.r,【答题】C语言程序设计问题与解释实验
  3. ajax登录验证的原理,ajax用户登录验证-get和post提交方式,与工作原理—2018-8-15...
  4. java邮件实例_java邮件小实例
  5. linux 密码修改下次,问题:如何强制用户在下次登录Linux时更改密码
  6. oracle 11g r2 rac中节点时间不同步,Oracle11gR2安装RAC错误之--时钟不同步
  7. cad lisp 二次抛物线_学习CAD的五个段位,你是青铜还是王者?
  8. 带研发团队后的日常思考1 初级管理者的困惑
  9. c/c++面试试题(一)
  10. 微信小程序保存图片到相册;uni-app小程序保存网络图片到相册;小程序保存图片到相册拒绝授权后重新拉起授权;保存图片到系统相册;小程序保存图片测试可以,真机保存图片失败