Уведомления

Группа в Telegram: @pythonsu

#1 Июль 26, 2015 18:44:18

0x420
Зарегистрирован: 2015-07-26
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи в создании функции

Решаю такую задачу

Разработать функцию clean_list (list_to_clean),
которая принимает 1 аргумент - список любых значений (строк, целых и действительных чисел) произвольной длины,
и возвращает список, состоящий из тех же значений, но не содержит повторов элементов. Это значит, что в случае наличия значения в первоначальном списке в нескольких экземплярах первый “экземпляр” значение остается на своем месте, а второй, третий и др. удаляются.

Я подумал решить ее с помощью циклов, или точнее цикла в цикле, как правильно это реализовать я не знаю
вот мой набросок :
def clean_list(list_to_clean = [1, 1.0, '1', -1, 1]):
    ind1 = 0                                         #индекс елемента с которым сравнивают
    
    lent = len(list_to_clean)                        # на всякий случай длина списка
    for i in range(lent-1):                           # (lent-1) потому что последний елемент и так  сравниm со всеми елементами
        elem = list_to_clean[ind1]                  # тут я создал переменную которая хранит в себе елемент с корым сравнивают
        for i in list_to_clean[ind1+1:]:             # тут список начинается сразу после елемента с корым сравнивают и до конца                          
            if elem == list_to_clean[ind1+1]:       # проверка совпадает ли переменная с елементом               \
                del list_to_clean[ind1+1]             # если совпадает то удаляем этот елемент
            ind1 = ind1 + 1                       # повишаем сравниваемый елмент на один  
        ind1 = ind1 + 1                               # повышаем елемент с короым сравниваем на один
    return list_to_clean

если пытаться объяснить, то я хотел что бы сравнивалось как то так, числа это индексы списка
[0] == [1, 2, 3, 4]
[1] == [2, 3, 4]
[2] == [3, 4]
....
При запуске не работает
и где ошибка даже не знаю, или где правильно сделал тоже, прошу вашей помощи

Отредактировано 0x420 (Июль 26, 2015 19:04:53)

Офлайн

#2 Июль 27, 2015 01:15:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Прошу помощи в создании функции

>>> def f(lst):
...     uniq = set()
...     i, llen = 0, len(lst)
...     while i < llen:
...         if lst[i] in uniq:
...             del lst[i]
...             llen -= 1
...         else:
...             uniq.add(lst[i])
...             i += 1
...     return lst
... 
>>> f([1, 2, 3] * 5)
[1, 2, 3]
>>>



Офлайн

#3 Июль 27, 2015 09:16:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Прошу помощи в создании функции

Правильный путь использовать библиотеки и дописывать код если там нет того что вам надо.
https://toolz.readthedocs.org/en/latest/api.html#toolz.itertoolz.unique
Правда это не прежний список….



Отредактировано doza_and (Июль 27, 2015 09:18:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version