现象
>>> l = [5, 2, 5, 3, 1, 8, 6, 7, 3] >>> l1 = list(set(l)) >>> l1 [1, 2, 3, 5, 6, 7, 8]
处理方法
利用集合去重, 然后用原列表的 index 方法排序
>>> l1.sort(key=l.index) >>> l1 [5, 2, 3, 1, 8, 6, 7]
or
>>> l1 = sorted(set(l), key=l.index) >>> l1 [5, 2, 3, 1, 8, 6, 7]
利用 for 和 if 进行有序去重
>>> l1 = [] >>> for i in l: ... if not i in l1: ... l1.append(i) ... >>> l1 [5, 2, 3, 1, 8, 6, 7]
or
>>> l1 = [] >>> [l1.append(i) for i in l if not i in l1] [None, None, None, None, None, None, None] >>> l1 [5, 2, 3, 1, 8, 6, 7]
利用字典的 key 值不重复的特性去重
>>> new_dict = {}.fromkeys(l) >>> new_dict {5: None, 2: None, 3: None, 1: None, 8: None, 6: None, 7: None} >>> list(new_dict.keys()) [5, 2, 3, 1, 8, 6, 7]
去重并保证列表顺序 (反向)
>>> l = [5, 2, 5, 3, 1, 8, 6, 7, 3] >>> l_reversed = list(reversed(l)) >>> l_reversed [3, 7, 6, 8, 1, 3, 5, 2, 5] >>> l1 = list(set(l)) >>> l1 [1, 2, 3, 5, 6, 7, 8] >>> l1.sort(key=l_reversed.index) >>> l1 [3, 7, 6, 8, 1, 5, 2] >>> l1.reverse() >>> l1 [2, 5, 1, 8, 6, 7, 3]
def deduplicate_and_keep_list_order(l, reverse=False): if reverse: l_reversed = list(reversed(l)) return list(reversed(sorted(set(l), key=l_reversed.index))) else: return sorted(set(l), key=l.index)
123