Форум сайта python.su
Долгое время писал на php, теперь столкнулся с Питоном
вот строка, которая делает список list уникальным (без повторов)
list = [111,222,333,111]
list = dict(map(lambda i: (i, 1), list)).keys()
x = lambda a, b: (a*b)
x(4,4) # 16
lambda i: (i, 1)
>>> z = lambda i: (i, 1)
>>> z(8)
(8, 1) # ??
Офлайн
ИгнатЭто как если бы вы писали:
>>> z = lambda i: (i, 1)
>>> z(8)
>>> z = (8,1)
>>> z
(8, 1)
>>> z[0]
8
>>> z[1]
1
Отредактировано (Окт. 6, 2010 08:01:33)
Офлайн
про уникальные списки здесь уже писали
более читаемый вариант со словарем
x = [111, 222, 333, 111]
x = dict(zip(x, x)).keys() # python 2.x
x = list(dict(zip(x, x)).keys()) # python 3.x
x = list(set(x))
Офлайн
спасибо!
непонятно только почему dict должен принимать zip с длиной 2: (zip(x, x))
и почему dict(zip(x, x)).keys() нельзя вызвать дважды:
lst = [111,222,111,222,333]
zp = zip(lst, lst)
>>> print(dict(zp).keys())
dict_keys([333, 222, 111])
>>> print(dict(zp).keys()) # повторяем
dict_keys([]) # уже пустой
Офлайн
Все дело в том, что функция zip возвращает итератор, по которому, как известно, можно пробежаться лишь однажды. Вызов dict(zp) как раз это и делает и “опустошает” итератор.
Отредактировано (Окт. 6, 2010 20:40:56)
Офлайн
> почему dict должен принимать zip
dict не должен принимать zip. dict может сделать словарь из списка, котором состоит из двухэлементных кортежей (ключ и значение), zip именно такой список и собирает (склеивает пару списков).
> функция zip возвращает итератор
Только в Python 3.
..bw
Офлайн
bwА во втором питоне что она возвращает?
> функция zip возвращает итератор
Только в Python 3.
Офлайн
>>> zip("abc", "def")
[('a', 'd'), ('b', 'e'), ('c', 'f')]
>>>
Отредактировано (Окт. 7, 2010 03:34:27)
Офлайн
> А во втором питоне что она возвращает?
>>> type(zip(range(5), range(5)))
<type ‘list’>
> .keys() и set() могут перемешать список
Это да, об этом нужно помнить. Порядок сохраняется в списке и в кортеже, но словарь или массив ни чего не обещают. Хотя в природе часто встречаются реализации упорядоченных или отсортированных словарей, но насколько я знаю, в батарейки они всё ещё не включены (Python II).
..bw
Офлайн
>>> la
[111, 222, 333, 111, 111, 222, 333, 111]
>>> lb = []
>>> for i in la:
... if i not in lb:
... lb.append(i)
...
>>> lb
[111, 222, 333]
>>>
Офлайн