python-進階教程-從序列中移除重複項並保持元素順序不變
0.摘要
本文主要介紹去除序列中重複的元素,並保持剩下元素順序不變的方法。
1.轉set()
如果只想去除重複元素,而不關心順序問題,可以將序列轉為set,從而達到簡單快速去重的效果。
a = [1,2,3,4,5,6,5,4,3,2,1,7,8,9]
a = list(set(a))
print(a)
#result:[1, 2, 3, 4, 5, 6, 7, 8, 9]
再次強調,這種方法不能保證剩下的元素順序不變。
2.藉助集合和生成器
def dedupe(items):
seen = set()
for item in items:
if item not in seen:
yield item
seen.add(item)
if __name__ == '__main__':
a = [1, 5, 2, 1, 9, 1, 5, 10]
print(a)
print(list(dedupe(a)))
注意:這種方法只有在序列中的元素是可雜湊的時候才適用。
可雜湊:如果一個物件是可雜湊的,那麼在它的生存期內必須是不可變的,他需要有一個__hash__()方法。整數、浮點數、字串、元組都是不可變的。
3.不可雜湊物件
如果序列中物件不可雜湊,那麼可以先將物件轉為可雜湊的。這裡模仿sorted、max()、min()方法,設定一個key引數。
# example2.py
#
# Remove duplicate entries from a sequence while keeping order
def dedupe(items, key=None):
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield item
seen.add(val)
if __name__ == '__main__':
a = [
{'x': 2, 'y': 3},
{'x': 1, 'y': 4},
{'x': 2, 'y': 3},
{'x': 2, 'y': 3},
{'x': 10, 'y': 15}
]
print(a)
print(list(dedupe(a, key=lambda a: (a['x'],a['y']))))
4.實際應用
在實際應用中,我們處理的資料並不侷限於列表,比如去除重複文字行也可以使用這樣的方法。
with open(file_path,'r') as f:
for line in dedupe(f):
……
相關文章
- Python實用技法第9篇:從序列中移除重複項且保持元素間順序不變Python
- 進行List集合去重操作,分為保持原List集合元素順序和不保持原順序
- 請教一個從Collection到Map保持排序順序不變的問題排序
- leetcode-刪除排序陣列中的重複項+移除元素LeetCode排序陣列
- 計蒜客 移除陣列中的重複元素陣列
- 如何保持json序列化的順序性?JSON
- Hashtable中put進去的物件是否保持put的順序物件
- [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除無序連結串列中的重複項REM
- python-進階教程-對切片進行命名Python
- python-進階教程-對兩個集合/字典求交集、差集、並集Python
- javascript去除陣列中重複元素程式碼例項JavaScript陣列
- jQuery調整li元素順序程式碼例項jQuery
- javascript獲取元素的順序程式碼例項JavaScript
- C++ 順序容器中訪問元素C++
- python-進階教程-使用物件屬性進行排序Python物件排序
- C# 移除陣列中重複資料C#陣列
- javascript刪除陣列中重複元素程式碼例項JavaScript陣列
- excel重複項篩選標色 excel表格重複項變色Excel
- CSS 元素層疊順序CSS
- Chapter 2 | Linked Lists--移除未排序連結串列中的重複項APT排序
- 使用jQuery去除陣列中的重複元素程式碼例項jQuery陣列
- js將陣列元素順序倒轉程式碼例項JS陣列
- java陣列中重複元素的去重Java陣列
- 將字串中的每個單詞順序進行顛倒,單詞還是原來的單詞,字母順序不發生變化字串
- 查詢Set中重複的元素
- sample, choices: 從list中隨機選擇無重複的元素隨機
- jQuery調整li元素順序jQuery
- 存在重複元素
- javascript顛倒陣列元素順序簡單程式碼例項JavaScript陣列
- JS中動態新增元素並繫結事件,造成程式重複執行JS事件
- 根據二叉樹的先序序列和中序序列還原二叉樹並列印後序序列二叉樹
- Windows中改變網路卡繫結順序Windows
- 從未排序的連結串列中刪除重複項排序
- 萬彩動畫大師教程 | 改變場景順序動畫
- JavaScript 拼接多個陣列並刪除重複元素JavaScript陣列
- 如何刪除ArrayList中的重複元素
- python-進階教程-通過公共鍵對字典列表排序Python排序
- css元素層疊順序詳解CSS