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.pswp.cn/news/394848.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394848.shtml
英文地址,請注明出處:http://en.pswp.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集合…