Уведомления

Группа в Telegram: @pythonsu

#1 Май 19, 2010 05:55:41

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

Удаление одинаковых элементов в списке.

>>> type({}.keys())
<type 'list'>
>>>
второй



Офлайн

#2 Май 19, 2010 10:53:37

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

Мой мозг слишком мал, чтобы осознать этот поток сознания.



Офлайн

#3 Май 19, 2010 11:15:39

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

Что выдает super(type({1:1}.keys())) в третьем? Либо оно обязано быть полиморфным с list.



Отредактировано (Май 19, 2010 11:16:25)

Офлайн

#4 Май 19, 2010 15:56:42

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

pasaranax
модный вариант:
l = [e for i,e in enumerate(l) if e not in l[:i]]
Думал как избавиться от enumerate. Неожиданно сработал такой код:

data = [data.pop(0) for i in data]
По смыслу, не должен работать. Фишку не разобрал пока.

Название l мне не нравится. Поменял на другое.

Подредактировал: убрал лишнее.



Отредактировано (Май 19, 2010 16:09:38)

Офлайн

#5 Май 19, 2010 16:08:53

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

неработает же

>>> data =
>>> data =
>>> data



Отредактировано (Май 19, 2010 16:10:13)

Офлайн

#6 Май 19, 2010 16:23:29

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

Zubchick
неработает же
Да. Примерно разобрался. Сработало, если бы функция работала немного по другому. Как-то так:

data = [1, 2, 3, 1, 2, 3, 1, 2, 3]

def rem(data, i):
while i in data: data.remove(i)
return i

data = [rem(data, i) for i in data]



Офлайн

#7 Май 19, 2010 16:59:26

mihailov.o.v
От:
Зарегистрирован: 2010-04-09
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

Спасибо, тоже разобрался, благо есть инет, по книгам не удалось бы решить проблему



Офлайн

#8 Май 19, 2010 17:09:46

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

Вот метод без пересоздания списка, но тут удаляются первые вхождения дублирующихся элементов.

data = [1, 2, 3, 4, 1, 2, 3, 5]

for i, e in enumerate(data):
if data.pop(i) not in data:
data.insert(i, e)
добавлено:
лажу написал, вот так лучше
for e in data:
if data.count(e) > 1:
data.remove(e)



Отредактировано (Май 19, 2010 17:51:51)

Офлайн

#9 Май 19, 2010 18:01:29

Kogrom
От:
Зарегистрирован: 2009-12-03
Сообщения: 160
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление одинаковых элементов в списке.

pasaranax
лажу написал, вот так лучше
Там тоже лажа на что-то типа *20

Си-стиль циклов рулит:

for i in xrange(len(data)-1, -1, -1):
if data.count(data[i]) != 1: del data[i]



Офлайн

#10 Май 20, 2010 00:56:06

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

Удаление одинаковых элементов в списке.

pasaranax
Что выдает super(type({1:1}.keys())) в третьем?
третий
>>> super(type({}.keys()))
<super: <class 'dict_keys'>, NULL>
>>>
второй
>>> super(type({}.keys()))
<super: <class 'list'>, NULL>
>>>
а чтобы из него список сделать, нужно привести
>>> l = [1, 2, 3, 4, 1, 2, 3, 5]
>>> l = list(dict(zip(l, l)).values())
>>> l
[1, 2, 3, 4, 5]
>>>
Kogrom
Думал как избавиться от enumerate. Неожиданно сработал такой код:
>>> l = [1, 2, 3, 4, 1, 2, 3, 5]
>>> l = [l.pop(0) for i in l]
>>> l
[1, 2, 3, 4]
>>>
показалось по ходу :)
должно быть 12345

pasaranax
Вот метод без пересоздания списка
>>> l = [1, 2, 3, 4, 1, 2, 3, 5]
>>> l = l*2
>>> l
[1, 2, 3, 4, 1, 2, 3, 5, 1, 2, 3, 4, 1, 2, 3, 5]
>>> for e in l:
... if l.count(e) > 1:
... l.remove(e)
...
>>> l
[4, 2, 2, 4, 1, 2, 3, 5]
>>>
Kogrom
Си-стиль циклов рулит:
xrange() - это во втором :)



Отредактировано (Май 20, 2010 00:57:21)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version