如何使用list_data.count删除列表中的重复元素?

时间:2017-04-10 18:09:19

标签: python list

def number_of_cases(list_data):
    result = []

    for i in list_data:
        for j in list_data:
            result.append(str(i) + str(j))

    return result

print(number_of_cases(['a', 'b', '1', '2']))

无论我输入什么list_data参数,我都想得到一个重复数据删除的案例列表。但是当论证为['a', 'a']时,我得到['aa', 'aa', 'aa', 'aa'],而不是['aa']。如何在保留订单的同时删除列表中的重复元素使用list_data.count()(因为这是作业)?

1 个答案:

答案 0 :(得分:1)

这似乎有效。注意我添加了一个dedup关键字参数,默认值为True,只是为了简化测试(随意将其删除)。

棘手的部分是它需要向后遍历result中的元素,因此每次删除元素时,它尚未查看的元素的索引不会改变。

另一种思考方式是,通过返回初始result,如果它看到不止一次出现的事情,它可以假设在列表中出现之前的另一个并且可以安全地删除当前的那个。

def number_of_cases(list_data, dedup=True):
    result = []

    for i in list_data:
        for j in list_data:
            result.append(str(i) + str(j))

    if dedup:
        # remove duplicates
        for i in range(len(result)-1, 0, -1):
            if result.count(result[i]) > 1:
                del result[i]

    return result

print(number_of_cases(['a', 'a', 'b'], dedup=False))
print(number_of_cases(['a', 'a', 'b']))  # will dedup by default

输出:

['aa', 'aa', 'ab', 'aa', 'aa', 'ab', 'ba', 'ba', 'bb']
['aa', 'ab', 'ba', 'bb']