给一个列表去除重复数据的最原始方法


啥也不说,先看代码

items = [6, 1, 4, 5, 4, 3, 8, 6]
new_items = []
for item in items:
    if item not in new_items:
        new_items.append(item)

new_items:

[6, 1, 4, 5, 3, 8]

这应该是给一个列表去除重复还保留顺序的最兼容的办法了,为啥叫最兼容,意思是绝大多数情况下你按这个写法去操作,无论列表里面是什么东西,它都能很好地帮你处理成功。

比如,列表里面不是简单的数字或字符,而是一个一个的字典(对象),这也是可以的。

items = [
    {'age': 6},
    {'age': 1},
    {'age': 4},
    {'age': 5},
    {'age': 4},
    {'age': 3},
    {'age': 8},
    {'age': 6}]
new_items = []
for item in items:
    if item not in new_items:
        new_items.append(item)

new_items:

[{'age': 6}, {'age': 1}, {'age': 4}, {'age': 5}, {'age': 3}, {'age': 8}]

而之前有种利用 OrderedDict 进行操作去重复并保留顺序的方法,则不适用于这种包含多个字典的情况。

为啥有时候会偏爱 OrderedDict 这种方法呢,因为:代码行数和思考方式,如果能有种方法可以快速帮你做到,自然是选快捷的。而且,在实际情况中,你可能需要在一个环节同时面对十几个字段的去重复操作,这时候能有一种内建的方法能支持你快速实现并让代码结构很流畅,是很辛福的事情。

当然,也可以把上面的办法独立写个函数,这样就可以到处调用了。

A_items = [
    {'age': 6},
    {'age': 1},
    {'age': 4},
    {'age': 5},
    {'age': 4},
    {'age': 3},
    {'age': 8},
    {'age': 6}]

B_items = [
    {'quantity': 60},
    {'quantity': 10},
    {'quantity': 40},
    {'quantity': 50},
    {'quantity': 40},
    {'quantity': 30},
    {'quantity': 80},
    {'quantity': 60}]

def select_distinct(items):
    new_items = []
    if not items:
        # 对于提供的数据不是符合数据结构的情况,可以根据具体情况来判断并修改返回空list或者是提示报错
        return new_items
    for item in items:
        if item not in new_items:
            new_items.append(item)
    return new_items

my_A_items = select_distinct(A_items)
my_B_items = select_distinct(B_items)

my_A_items:

[{'age': 6}, {'age': 1}, {'age': 4}, {'age': 5}, {'age': 3}, {'age': 8}]

my_B_items:

[{'quantity': 60},
 {'quantity': 10},
 {'quantity': 40},
 {'quantity': 50},
 {'quantity': 30},
 {'quantity': 80}]

这样,你可能不止两个三个需要处理,有时候可能是十几个,这样代码结构上的流畅性就很可观了。