boltayka
Май 15, 2010 00:41:38
Всем привет… Сразу говорю, учебник читал, гугл копал. Не знаю как сделать… Задача такая: Надо удалить из списка одинаковые значения.
Допустим: должно превращаться в
Я не знаю, может и глупость спрашиваю. Но, всё-же хотелось найти какое-то готовое решение. Как говорится, всё знать нельзя. Заранее спасибо
Alex2ndr
Май 15, 2010 01:05:48
Плохо читали. Про set(наборы) смотрите. Вот вам пример:
In [1]: l = ['q', 'a', 'ew', 'ewq', 'Large Hadron Collider', 'q', 'ew' ,'a']
In [2]: f = set(l)
In [3]: f
Out[3]: set(['q', 'a', 'ew', 'ewq', 'Large Hadron Collider'])
In [4]: list(f)
Out[4]: ['q', 'a', 'ew', 'ewq', 'Large Hadron Collider']
In [5]:
Кто сможет сделать это без использования set?
py.user.next
Май 15, 2010 08:05:55
>>> l = ['q', 'a', 'ew', 'ewq', 'Large Hadron Collider', 'a', 'a', 'q', 'ew', 'a']
>>> l2 = []
>>> for i in l:
... if i not in l2:
... l2.append(i)
...
>>> l2
['q', 'a', 'ew', 'ewq', 'Large Hadron Collider']
>>> l = l2
>>> l
['q', 'a', 'ew', 'ewq', 'Large Hadron Collider']
>>>
такую или в смысле что-нибудь поумней
Насчет поумней не знаю, а то, что у меня на уме намного короче :)
pasaranax
Май 15, 2010 17:37:13
модный вариант:
l = [e for i,e in enumerate(l) if e not in l[:i]]
хакерский вариант:
l = dict(zip(l, l)).values()
надо придумать вариант без пересоздания списка, думаю тут уже одной строчкой не обойтись
Угу, хакерский вариант - это то, что я имел в виду.
dict(zip(l, l)).keys() короче :)
pasaranax
Май 15, 2010 19:15:28
Ed
dict(zip(l, l)).keys() короче smile
values идеологически правильнее :)
Без пересоздания списка не получается написать из-за побочных эффектов, либо получается громоздко, а значит не круто.
boltayka
Май 16, 2010 22:31:59
Не плохо. Спросил простейшую вещь, и чуть не разжег холивар =D
Всем спасибо!
py.user.next
Май 18, 2010 03:23:53
l = dict(zip(l, l)).values()
dict_values([1, 2, 3, 4, 5])
это на третьем