Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2015 16:33:39

giveback
Зарегистрирован: 2015-05-03
Сообщения: 36
Репутация: +  6  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

ещё вариант

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]

Офлайн

#2 Сен. 16, 2015 16:33:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

0x420
такой вариант не подойдет, надо проверка на тип данных, что бы 1.0 и 1
Справедливо, сейчас переделаю



Офлайн

#3 Сен. 16, 2015 16:35:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

#!/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))



Офлайн

#4 Сен. 16, 2015 16:35:39

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

Удаление повторов, ошибка в коде.

Круто, спасибо, можно вопрос, каким образом вы сделали что тип тоже проверяется?
если выполняется условие то вы добавляли елемент в список по которому проходит итерация? ?

Офлайн

#5 Сен. 16, 2015 16:39:11

giveback
Зарегистрирован: 2015-05-03
Сообщения: 36
Репутация: +  6  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

в моём варианте сохраняется и значение и его тип, а последующие итерации проверяют есть ли уже такое же значение с таким же типом. тип проверяется функцией type()

Отредактировано giveback (Сен. 16, 2015 16:40:08)

Офлайн

#6 Сен. 16, 2015 16:49:32

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

Удаление повторов, ошибка в коде.

Большое вам спасибо, а таких штук я правда еще не знаю

if (type(i), i) not in in_lst:
[value[0] for value in result]
Задание приняли, теперь попытаюсь своего монстра заставить работать

Офлайн

#7 Сен. 16, 2015 18:03:44

Originator
От: Харьков, Украина
Зарегистрирован: 2015-08-01
Сообщения: 29
Репутация: +  1  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

0x420
……а таких штук я правда еще не знаю….

Хэ-хэ, мы много чего не знаем, не умеем, не понимаем, и чем дальше, тем больше удивляет гибкость языка, и его возможности, как бы не очень очевидные для новичков. Опыт, незаменимая штука, спасибо парням, что делятся с нами.
ЗЫ: кстате, фрагмент (type(I), I) как правильно понять? В скобке получается имеем указание типа переменной I, а через запятую все вместе в скобках читается как? Не умею в скобках, через запятую задавать условие для оператора, не хватает знания понять.
ЗЫ:ЗЫ: получается сразу в условие сравнения ставится ТИП привязанный для сравнения с переменной I, ну как бы пара условия как единое целое?

Отредактировано Originator (Сен. 16, 2015 18:15:24)

Офлайн

#8 Сен. 16, 2015 18:48:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

Originator
Вы же знаете что такое кортеж?
Ну так вот (type(I), I) это как раз и есть кортеж

t = type(i)
i_typei_tuple = (t, i)
Скобки тут необязательны, но с ними лучше читается.
А постольку поскольку кортеж - хешируемый объект, то он может быть ключом словаря и его можно поместить во множество.



Офлайн

#9 Сен. 16, 2015 20:52:24

giveback
Зарегистрирован: 2015-05-03
Сообщения: 36
Репутация: +  6  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

а про конструкцию вида

[value[0] for value in result]
можно почитать тут https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

Отредактировано giveback (Сен. 16, 2015 20:53:35)

Офлайн

#10 Сен. 16, 2015 21:39:04

Originator
От: Харьков, Украина
Зарегистрирован: 2015-08-01
Сообщения: 29
Репутация: +  1  -
Профиль   Отправить e-mail  

Удаление повторов, ошибка в коде.

Блин, долго сидел думал, наверное тугодум :-)
Прицепился к скобкам, а слона та и не заметил. Вся работа в кортеже заключалась. Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version