Найти - Пользователи
Полная версия: Удаление одинаковых элементов в списке.
Начало » Python для новичков » Удаление одинаковых элементов в списке.
1 2 3 4 5
py.user.next
>>> type({}.keys())
<type 'list'>
>>>
второй
Ed
Мой мозг слишком мал, чтобы осознать этот поток сознания.
pasaranax
Что выдает super(type({1:1}.keys())) в третьем? Либо оно обязано быть полиморфным с list.
Kogrom
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 мне не нравится. Поменял на другое.

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

>>> data =
>>> data =
>>> data
Kogrom
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]
mihailov.o.v
Спасибо, тоже разобрался, благо есть инет, по книгам не удалось бы решить проблему
pasaranax
Вот метод без пересоздания списка, но тут удаляются первые вхождения дублирующихся элементов.
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)
Kogrom
pasaranax
лажу написал, вот так лучше
Там тоже лажа на что-то типа *20

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

for i in xrange(len(data)-1, -1, -1):
if data.count(data[i]) != 1: del data[i]
py.user.next
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() - это во втором :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB