python從序列中去重且保持元素間順序不變

2021-09-22 20:00:06 字數 766 閱讀 2294

如果序列中的值是可雜湊的,那麼可以直接用下面的方法:

如果不知道是不是可雜湊的可以這樣判斷: isinstance(物件,hashable)

def dedupe(items):

seen = set()

for item in items:

if item not in seen:

yield item

seen.add(item)

list(dedupe([random.randint(0,100) for k in range(1000)]))

不算函式一句話就搞定啦,真的很方便

如果是不可雜湊物件的話,就用下面的:

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)

key的作用是指定乙個函式用來將序列中的元素轉換為可雜湊的型別.

舉個例子:

a = [, , , ]

list(dedupe(a, key=lambda d: (d['x'], d['y'])))

list(dedupe(a, key=lambda d: d['x']))

Python 序列去重

1 效率最高的方式,需要保證序列中的元素都是可雜湊的,即數值 字串 元組 frozenset等,而列表 字典 集合之類的就不行。def foo s try return list set s expect expection,e pass 2 效率中的方式,需要保證序列中的元素都是可排序的。def ...

python實現序列整數去重

massage 題目描述 輸入n個整數的序列,要求對這個序列進行去重操作。所謂去重,是指對這個序列中每個重複出現的整數,只保留該數第一次出現的位置,刪除其餘位置。輸入描述 輸入包含兩行,第一行包含乙個正整數n 1 n 1000 表示第二行序列中數字的個數 第二行包含n個整數 範圍1 5000 用空格...

python學習 對列表中的元素去重並保持原順序

比如 list1 1,2,4,9,5,6,5,2,4,7,8,0 現在需要對其進行去重,最簡單的操作是通過set方法 得到 0,1,2,4,5,6,7,8,9 但是這樣就改變了原來的順序,如果我們還想保持原來列表的順序,可以通過sort 方法中的key欄位進行設定 list1 1,2,4,9,5,6...