Форум сайта python.su
6
ещё вариант
def clean_list(list_to_clean): result = [] for el in list_to_clean: value = (el, type(el)) if value not in result: result.append(value) return [value[0] for value in result]
Офлайн
568
0x420Справедливо, сейчас переделаю
такой вариант не подойдет, надо проверка на тип данных, что бы 1.0 и 1
Офлайн
568
#!/usr/bin/env python # -* coding: utf-8 -*- def unique_list(lst): result = [] in_lst = set() for i in lst: if (type(i), i) not in in_lst: result.append(i) in_lst.add((type(i), i)) return result s = [1, 1.0, 0, "ss", 4.0, "ss", 0, 33, 4.0] print (unique_list(s))
Офлайн
0
Круто, спасибо, можно вопрос, каким образом вы сделали что тип тоже проверяется?
если выполняется условие то вы добавляли елемент в список по которому проходит итерация? ?
Офлайн
6
в моём варианте сохраняется и значение и его тип, а последующие итерации проверяют есть ли уже такое же значение с таким же типом. тип проверяется функцией type()
Отредактировано giveback (Сен. 16, 2015 16:40:08)
Офлайн
0
Большое вам спасибо, а таких штук я правда еще не знаю
if (type(i), i) not in in_lst: [value[0] for value in result]
Офлайн
1
0x420
……а таких штук я правда еще не знаю….
Отредактировано Originator (Сен. 16, 2015 18:15:24)
Офлайн
568
Originator
Вы же знаете что такое кортеж?
Ну так вот (type(I), I) это как раз и есть кортеж
t = type(i) i_typei_tuple = (t, i)
Офлайн
6
а про конструкцию вида
[value[0] for value in result]
Отредактировано giveback (Сен. 16, 2015 20:53:35)
Офлайн
1
Блин, долго сидел думал, наверное тугодум :-)
Прицепился к скобкам, а слона та и не заметил. Вся работа в кортеже заключалась. Спасибо.
Офлайн