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

发现问题

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 开发 存储目录的详解

Android 开发 存储目录的详解 简介   Android设备,有3个地方的文件存储位置,他们分别是:  内部存储空间(用户无法浏览到此目录)  外部存储空间(就是手机自身的文件管理目录,用户可以浏览)  SD卡的存储空间(需要插入T卡)  SharedPreferences目录  存储数据库DB目录内…

大数据项目交付国标_在紧迫的期限内交付大型项目

大数据项目交付国标by Paul McGillivray保罗麦吉里夫瑞(Paul McGillivray) 在紧迫的期限内交付大型Web项目 (Delivering a big web project for a tight deadline) This week we launched the first phase of a large website for a fast-growing business, ‘Jump In’. The …

CentOS 安装MySQL(rpm)提示错误Header V3 DSA/SHA1 Signature

提示错误&#xff1a;Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY error: Failed dependencies 错误原因&#xff1a;这是由于yum安装了旧版本的GPG keys造成的 解决办法&#xff1a;后面加上--force --nodeps 原文&#xff1a; 摘要&#xff1a; CentOS安装rpm安装…

linux系统文件的复制,linux操作系统文件复制操作

《linux操作系统文件复制操作》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《linux操作系统文件复制操作(5页珍藏版)》请在人人文库网上搜索。1、网络操作系统”课程实验报告名:号:业:计算机科学与技术间:2012年5月 日师:北京联合大学-信息学院编制Linux-文件的系统…

恶意软件伪装“正规军”,撕开Booster Cleaner“画皮”下的真相

经常使用手机浏览器阅读小说的用户都知道&#xff0c;在浏览器页面经常会出现一些推广游戏应用、手机清理应用等应用的弹窗广告。有时出于方便&#xff0c;我们也会选择直接点开这些弹窗广告进行应用下载。但这种行为并不安全&#xff0c;部分恶意应用会先伪装成“正规军”诱导…

python初学者代码示例_python基础示例

7、写代码 &#xff08;1&#xff09;实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!_name "seven"_pwd "123"name input("username:").strip() pwd input("password:").strip()if name _…

33岁想从头学做网页设计_从头开始设计精美的移动应用

33岁想从头学做网页设计by Harshita Arora通过Harshita Arora 从头开始设计精美的移动应用 (Designing beautiful mobile apps from scratch) I started learning graphic design when I was 13. I learned to design websites from online courses and used to play around w…

Lucene 基础理论 (zhuan)

http://www.blogjava.net/hoojo/archive/2012/09/06/387140.html**************************************** 1. 全文检索系统与Lucene简介 1.1 什么是全文检索与全文检索系统 全文检索是指计算机索引程序通过扫描文章中的每一个词&#xff0c;对每一个词建立一个索引&#xff0…

npm使用指南

npm使用指南 作者&#xff1a;chszs&#xff0c;未经博主同意不得转载。经许可的转载需注明作者和博客主页&#xff1a;http://blog.csdn.net/chszs npm介绍 npm全称为Node Package Manager。是一个基于Node.js的包管理器&#xff0c;也是整个Node.js社区最流行、支持的第三方模…

div固定大小文字溢出自动缩小_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!

写在前面随着系统并发量越来越高&#xff0c;Tomcat所占用的内存就会越来越大&#xff0c;如果对Tomcat的内存管理不当&#xff0c;则可能会引发Tomcat内存溢出的问题&#xff0c;那么&#xff0c;如何防止Tomcat内存溢出呢&#xff1f;我们今天就来一起探讨下这个问题。防止To…

linux下的ssh端口号修改,如何在 Linux 中更改 SSH 端口

默认情况下&#xff0c; SSH 侦听端口 22 。 更改默认 SSH 端口可以降低被自动攻击的风险&#xff0c;从而为服务器增加额外的安全层。和更改默认端口相比&#xff0c;将防火墙配置为仅允许从特定主机访问端口 22 则更加简单和安全。本教程介绍如何更改 Linux 中的默认 SSH 端口…

【洛谷P1833】樱花

先说80分代码&#xff1a;最基本的混合背包&#xff0c;判断是完全&#xff0c;01&#xff0c;或是多重&#xff0c;再选择。 状态转移方程&#xff1a;f[j]max(f[j],f[j-co[i]]v[i]); 1 #include<bits/stdc.h>2 using namespace std;3 int a[10001],c[10001],t[10001],f…

TCC分布式事务

https://github.com/changmingxie/tcc-transaction转载于:https://www.cnblogs.com/520playboy/p/7235716.html

迭代器2

小结 凡是可作用于for循环的对象都是Iterable类型&#xff1b; 凡是可作用于next()函数的对象都是Iterator类型&#xff0c;它们表示一个惰性计算的序列&#xff1b; 集合数据类型如list、dict、str等是Iterable但不是Iterator&#xff0c;不过可以通过iter()函数获得一个Itera…

长尾关键词seo_为什么您不应该忘记长尾SEO

长尾关键词seoby Ben Rudolph通过本鲁道夫 为什么您不应该忘记长尾SEO (Why you shouldn’t forget about long tail SEO) A few months ago, I wrote about how I built ThingsOnReddit. It’s a site that finds the best Amazon products posted to Reddit and uses Amazon…

python调用hive与java调用区别_使用Pyhive调用

我正在使用pyhive与hive交互。在 使用下面的代码&#xff0c;SELECT语句运行良好。在# Import hive module and connect from pyhive import hive conn hive.Connection(host"HOST") cur conn.cursor() # Import pandas import pandas as pd # Store select query …

linux gnome启动命令,如何在Gnome Shell上自动启动程序

登录Gnome Shell时自动打开应用程序是提前设置工作区的好方法。在Gnome Shell上自动启动程序的最简单方法是使用Tweaks应用程序。在本指南中&#xff0c;我们将介绍如何安装Gnome Tweaks应用程序以轻松配置自动程序启动。让我们开始吧&#xff01;通过GUI自动启动程序默认情况下…

netstat查看linux运行的端口,查看哪些端口被打开 netstat -anp

一、查看哪些端口被打开 netstat -tnl二、关闭端口号:iptables -A OUTPUT -p tcp --dport 端口号-j DROP三、打开端口号&#xff1a;iptables -A INPUT -ptcp --dport 端口号-j ACCEPT四、保存设置service iptables save五、以下是linux打开端口命令的使用方法。nc -lp 23 &…

用户体验岗如何说服其他部门_为什么我们应该说服用户更新他们的浏览器-这是双赢的。...

用户体验岗如何说服其他部门by Alex Ewerlf由AlexEwerlf 为什么我们应该说服用户更新他们的浏览器-这是双赢的。 (Why we should convince our users to update their browsers — it’s a win-win.) Unless you’ve been living under a rock recently, you’re aware of Mel…

【JAVA并发编程实战】3、同步容器

同步容器包括Vector和Hashtable&#xff0c;还有一些由Collections.synchronizedXxx等工厂方法创建的 1、同步容器类的问题 同步容器类都是线程安全的&#xff0c;但是有些时候还是要客户端加锁来保护复合操作 就比如vector的操作&#xff0c;如果又两个方法一个获取vector集合…