Форум сайта python.su
Решаю такую задачу
Разработать функцию 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)
Офлайн
>>> 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] >>>
Офлайн
Правильный путь использовать библиотеки и дописывать код если там нет того что вам надо.
https://toolz.readthedocs.org/en/latest/api.html#toolz.itertoolz.unique
Правда это не прежний список….
Отредактировано doza_and (Июль 27, 2015 09:18:58)
Офлайн