发现问题

python嵌套列表大家应该都不陌生,但最近遇到了一个问题,这是工作中遇到的一个坑,首先看一下问题

raw_list = [["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"], ["百度", "CPY"]]

列表嵌套了列表,并且有一个重复列表["百度", "CPY"],现在要求将这个重复元素进行去重(重复是指嵌套的列表内两个元素都相同),并且保证元素顺序不变,输出还是嵌套列表,即最后结果应该长这样:[["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"]]

正常Python去重都是使用set,所以我这边也是用这种思想处理一下

In [8]: new_list = [list(t) for t in set(tuple(_) for _ in raw_list)]

In [9]: new_list

Out[9]: [['京东', 'CPY'], ['百度', 'CPY'], ['黄轩', 'PN']]

=。=以为大功告成,结果发现嵌套列表顺序变了

好吧一步步找一下是从哪边顺序变了的

In [10]: s = set(tuple(_) for _ in raw_list)

In [11]: s

Out[11]: {('京东', 'CPY'), ('百度', 'CPY'), ('黄轩', 'PN')}

恍然大悟关于set的两个关键词:无序 和 不重复 =。=

所以从set解决排序问题基本无望了,然而我还没有放弃,现在问题就变成了对于new_list怎么按照raw_list元素顺序排序,当然肯定要通过sort实现

翻一下Python文档找到以下一段话

sort(*, key=None, reverse=False)

This method sorts the list in place, using only < comparisons between

items. Exceptions are not suppressed - if any comparison operations

fail, the entire sort operation will fail (and the list will likely be left in a

partially modified state).

[`sort()`](https://docs.python.org/3/library/stdtypes.html?highlight=sort#list.sort "list.sort")

accepts two arguments that can only be passed by keyword ( [keyword-only arguments](https://docs.python.org/3/glossary.html#keyword-only-parameter) ):

key specifies a function of one argument that is used to extract a

comparison key from each list element (for example, key=str.lower).

The key corresponding to each item in the list is calculated once and then used for the entire sorting process. The default value of None

means that list items are sorted directly without calculating a separate

key value.

开始划重点:

sort方法通过参数key指定一个方法,换句话说,key参数的值是函数。

这个函数和new_list上的每个元素会产生一个结果,sort通过这个结果进行排序。

于是这里就想到求出new_list里的每一个元素在raw_list里的索引,根据这个索引进行排序。

代码实现如下:

In [13]: new_list.sort(key=raw_list.index)

In [14]: new_list

Out[14]: [['百度', 'CPY'], ['京东', 'CPY'], ['黄轩', 'PN']]

结果和期望一样 =。=

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

时间: 2017-12-25

python中列表实现去重使用_Python实现嵌套列表去重方法示例相关推荐

  1. python中insert()函数的用法_Python list insert()用法及代码示例

    insert()是Python中的内置函数,可将给定元素插入列表中的给定索引. 用法: list_name.insert(index, element) 参数: index - the index a ...

  2. python中shutil.copyfile的用法_Python shutil.copyfile()用法及代码示例

    Python中的Shutil模块提供了许多对文件和文件集合进行高级操作的功能.它属于Python的标准实用程序模块.此模块有助于自动执行文件和目录的复制和删除过程. shutil.copyfile() ...

  3. python中导入模块有哪些_python有三种导入模块的方法

    原博文 2011-05-24 10:54 − python有三种导入模块的方法 其一, import modname : 模块是指一个可以交互使用,或者从另一Python 程序访问的代码段.只要导入了 ...

  4. python中大于0怎么表示_python怎么筛选列表中大于0的数据?

    k17少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 python筛选列表中大于0的数据的方法:k17少儿编程网-Scratch_Python_教程_免费儿童编程学习平台 1.使 ...

  5. python中reversed是什么意思_Python reversed函数及使用方法解析

    Python reversed函数及使用方法解析 有些时候,程序需要进行反向遍历,此时可通过 reversed() 函数,该函数可接收各种序列(元组.列表.区间等)参数,然后返回一个"反序排 ...

  6. python中星号怎么打出来_Python打印“菱形”星号代码方法

    本人是一名python初学者,刚刚看到一道有趣的python问题,"用python如何在编译器中打印出菱形图案?" 因此决定尝试一下,代码不多,仅供参考. 代码 def print ...

  7. python中os模块详解_Python OS模块(常见文件操作示例)

    1 Python 常见文件操作示例 2. 3. os.path 模块中的路径名访问函数 4. 分隔 5. basename() 去掉目录路径 , 返回文件名 6. dirname() 去掉文件名 , ...

  8. python中mode函数怎么用_Python Wand mode()用法及代码示例

    原始图片: 范例1: # Import library from Image from wand.image import Image # Import the image with Image(fi ...

  9. python 打印xml文档树_Python构建XML树结构的方法示例

    本文实例讲述了Python构建XML树结构的方法.分享给大家供大家参考,具体如下: 1.构建XML元素 #encoding=utf-8 from xml.etree import ElementTre ...

最新文章

  1. java ssh文件下载_Java使用SSH从远程服务器下载文件
  2. TypeError: rectangle() got an unexpected keyword argument ‘width‘报错:
  3. 计算机网络 上海交大 ppt,上海交大计算机网络2.ppt
  4. Xshell代理访问外网或者公司的内网
  5. 包含了6种不同格式的10种不同的Code 39条形码字体样式的工具包Code 39 Font Advantage Package
  6. 为心爱的人做一个超具创意的表白网页吧❤(告白气球)HTML+CSS+JavaScript
  7. 怎么在电脑上创建一个虚拟机
  8. java中金额元转万元工具类
  9. strip指令——减小文件的大小(给文件脱衣服)
  10. ipmitool 修改
  11. 转炉炼钢计算机仿真实验报告,计算机仿真、实验报告.docx
  12. 批量挖sql注入漏洞
  13. 计算机中bcd的中文意思,BCD码
  14. 搜狗搜索或成为企鹅号流量入口:腾讯欲实现自己的流量闭环
  15. Qt字体族FontFamily一览表
  16. [zt] Big-Endian VS Little-Endian —— 从大头开始还是小头开始
  17. 传统网络游戏(偏重MMORPG)的模块划分
  18. 【概率论】基础之概率概论与集合论
  19. 智改数转下的生产质量数字化案例:智能制造转型,精益生产升级
  20. DaVinci Resolve Studio 18 mac中文版 (达芬奇剪辑软件)

热门文章

  1. 阿里云天池 Python训练营Task2: Python基础练习:数据结构大汇总 学习笔记
  2. HDU 最大报销额 (0 1 背包)
  3. 《操作系统真象还原》——0.23 操作系统是如何识别文件系统的
  4. mysql 中某个字段相同的数据拼接起来
  5. ChemDraw教程:如何查看和删除俗名
  6. 浅谈JavaScript中闭包
  7. Oracle内部错误:ORA-07445[kcflfi()+466] [INT_DIVIDE_BY_ZERO]一例
  8. 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助...
  9. java的classpath
  10. SQL基础-- 数据处理(DML、RETURNING、MERGE INTO)