1

Тема: Видалення дублікатів елементів із списку

Доброго всім дня!

Є таке завдання:

Розробити функцію clean_list(list_to_clean),
яка приймає 1 аргумент -- список будь-яких значень (рядків, цілих та дійсних чисел) довільної довжини,
та повертає список, який складається з тих самих значень, але не містить повторів елементів. Це значить, що у випадку наявності значення в початковому списку в кількох екземплярах перший "екземпляр" значення залишається на своєму місці, а другий, третій та ін. видаляються.

Написав такий код:

def clean_list(list_to_clean):
    a=list_to_clean
    b=[]
    for i in a:
        if i not in b:
            b.append(i)
    return b

Підкажіть, будь ласка, чи є засіб розділи  елементи "1" та "1.0" щоб система не вважала що вони однакові і дорівнюють "1" під час перевірки наявності в другому списку?

Подякували: P.Y.1

2 Востаннє редагувалося P.Y. (27.11.2016 19:52:30)

Re: Видалення дублікатів елементів із списку

(Не натикався раніше на цю багофічу з типами. Дякую, що помітили!)

Можна перебирати поелементно список b, звіряючи тип та значення.

def clean_list(list_to_clean):
    a=list_to_clean
    b=[]
    for i in a:
        for j in b:
            if i==j and type(i)==type(j):break
        else:
            b.append(i)
    return b
Подякували: vitek_z1

3 Востаннє редагувалося ADR (30.12.2016 23:44:44)

Re: Видалення дублікатів елементів із списку

Значно швидший варіант:

from collections import OrderedDict

def cleaned(list_for_clean):
    result_dict = OrderedDict()
    for e in list_for_clean:
        result_dict[repr(e)] = e
    return list(result_dict.values())
Подякували: koala, vitek_z2