
Dmitry
16.12.2016
09:59:26
https://www.youtube.com/watch?v=p33CVV29OG8

Serge
16.12.2016
10:19:55

Dmitry
16.12.2016
10:53:36
прикольно, что они там вроде в формальной, а вроде неформальной с пивком обстановке.

Serge
16.12.2016
10:53:54

Google

Serge
16.12.2016
10:54:11
последняя линуксовка в D3c0d3

Dmitry
16.12.2016
10:54:22
дааа!
:)

Dmitry
16.12.2016
11:59:09
кто тоже пропустил: с #itnonstop появились фотки и видео http://goo.gl/2hE6lv
есть фотка с @pragus и мной, в остальных не вглядывался

Dmitry
16.12.2016
12:06:37
@jetbootsmaker детектед

Aleksander
16.12.2016
13:10:33
эх.. и то сбоку)

Roman
16.12.2016
14:30:25

Dmitry
16.12.2016
14:33:48
ты про хакатон?

Roman
16.12.2016
14:35:59
Да-да
https://youtu.be/05ypjNXun8w

Serge
16.12.2016
14:42:25

Google

Danil
16.12.2016
14:43:34
они там хакатонят на тему развития стриптиз бизнесов вроде

Serge
16.12.2016
14:43:52
ну да, и девки менторят по ньюансам индустрии;)
https://youtu.be/3w4AsKAI3VA
внимание на ведущего...
это же сам Гриша:)

Dmitry
16.12.2016
16:02:00
о
знакомый клуб
он прям хороший и в духе стартапа сделан
неудивительно что они хакатонят

Aleksandr
16.12.2016
16:03:49
Ох сколько феминисток на эту тему высказалось ...

Dmitry
16.12.2016
16:04:01
они не любят эту тему, да

Folt
16.12.2016
22:43:34
как добавить уникальные записи в список ?

b0g3r
16.12.2016
22:43:51
?

Folt
16.12.2016
22:45:59
делаю так
route_list = set()
route_list.add(['a','b'])
route_list.add(['a','b'])
route_list.add(['a','c'])
надо что бы остался только ['a','b'] и ['a','c'] в route_list

b0g3r
16.12.2016
22:47:11

Folt
16.12.2016
22:47:45
а как по делу сделать ?

b0g3r
16.12.2016
22:48:02
route_set = set()
route_set.add(('a','b'))
route_set.add(('a','b'))
route_set.add(('a','c'))
Out[17]: {('a', 'b'), ('a', 'c')}

Folt
16.12.2016
22:49:20
route_set.add(('a','b')) = а это тогда что будет ?

b0g3r
16.12.2016
22:49:40
ну а проверить
или в чем вопрос
[a,b] - список
(a,b) - кортеж (хэшируем, неизменяем)

Folt
16.12.2016
22:57:59
не работате
делаю так
a = 'a'
b = 'b'
route_set.add(a, b)

Google

b0g3r
16.12.2016
22:58:23
внутренние скобки забыл

Folt
16.12.2016
22:58:30
route_set.add( (a, b ))

b0g3r
16.12.2016
22:58:47
чувак, тебе в @python_beginners

Folt
16.12.2016
23:02:15
2 ночи
работате кста, спс

GNU/Docker
17.12.2016
02:45:19
docs.python.org/tutorial

Aleksandr
17.12.2016
10:39:07
Кстати, к слову об этих махинациях со списками. Нужно хранить, например, список пар чисел, которые считаются одинаковыми без учета порядка.
Первое что в голову пришел - это set of frozensets:
>>> {frozenset('12'), frozenset('21')}
set([frozenset(['1', '2'])])
А ничего красивее не придумывается.

Zart
17.12.2016
10:39:39
либо вставлять сортированными

Serge
17.12.2016
10:57:14

Aleksandr
17.12.2016
10:57:55
Можно сказать это список ребер неориентированного графа.

Serge
17.12.2016
10:58:55

Aleksandr
17.12.2016
10:59:13
На самом деле вопрос скорее синтетический был :)

Serge
17.12.2016
10:59:54
Кстати, про графы есть как раз наркоманская либа

Aleksandr
17.12.2016
11:17:23
Лайк?..

Serge
17.12.2016
11:31:04
Лайк?..
Не могу найти сейчас. Вот нашел только http://stackoverflow.com/a/606858

Aleksandr
17.12.2016
11:31:33
Почему надо стучать пальцами по венам прежде чем ее смотреть? :)

Serge
17.12.2016
11:31:55
Но там ни одна не успеет
a >> b
Для задания ребра

Eugene
17.12.2016
11:39:03
Но оно больше для визуализации графов, хотя и все основные алгоритмы там тоже есть

Google

Sergey
17.12.2016
12:06:21
https://graph-tool.skewed.de/performance

Aleksandr
17.12.2016
15:27:23
Кстати, а случайно не было холивара на тему того, что использовать в качестве class varibles - list или tuple? :)
Во всяких DRF, Django, etc, в моделях, фильтрах и прочем.
Что-то заметил тенденцию в сторону листов. Для динамичности? :) А то что память выделяется не интепретатором и перфоманс весь к херам? :)

Dmitry
17.12.2016
15:31:56
вроде бы правило 'если tuple тебе ок, бери его, а не лист'
так что не знаю зачем они так делают
возможно просто не парятся
но кстати вэйт э минут

Aleksandr
17.12.2016
15:35:05
class CommonInfo(models.Model):
# ...
class Meta:
abstract = True
ordering = ['name']
Типа вот, внезапно list.

Dmitry
17.12.2016
15:35:38
если речь про class variables, то для того чтобы юзер мог расширить наверное

Aleksandr
17.12.2016
15:35:55
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (IsAdminUser,)
Внезапно tuple
a = (‘a’,)
a += (‘b’,)
Я и с ними могу расширяться.

Admin
ERROR: S client not available

Aleksandr
17.12.2016
15:36:46
Примеры конечно разные, но это просто сходу что нашел. Мне кажется если пороюсь найду list не только в Meta :)

Chikiro
17.12.2016
15:37:07
По идее же list для гомогенных данных, а tuple - для гетерогенных.

Aleksandr
17.12.2016
15:37:23
Это очень помогло :)

Dmitry
17.12.2016
15:37:40

Aleksandr
17.12.2016
15:38:09
Еп. Но и чо :) Присвоится новый объект и ладно
Я к тому что технически в конкретном случае я не вижу особой разницы и похоже что это больше как тема вкуса. Опуская все эти за двиги на тему выделения памяти, error prone штуки типа (IsAdminUser) vs (IsAdminUser,)
И отмечаю что почему-то стал замечать листы … Будто есть какая-то подоплека с тем, что растет процент переходящих на 3-ку :)

Dmitry
17.12.2016
15:42:22

Google

Aleksandr
17.12.2016
16:25:53
С одним элементом без трейлинг коммы как-то совсем плохо :) типа в этом фишка листа, что там не надо ... Меньше ошибок

GNU/Docker
17.12.2016
16:26:59
Какие ужасные трейлинг коммы.
Прямо главная проблема

Zart
17.12.2016
16:31:01

Aleksandr
17.12.2016
16:31:35
Он имел в виду не то что хранится внутри :)
То что там должен быть hashable это ясно

Zart
17.12.2016
16:33:36
для гомогенных у нас array есть
ну и нумпи всякие

Serge
17.12.2016
16:36:13
Если list - атрибут класса , то это должно быть с целью. Нужно это может быть, чтобы шарить данные между инстансами
Потому что любой append увидят все

Zart
17.12.2016
16:39:10
>>> class A:
... t = 0,
... l = [0]
... def add_t(self, v):
... self.t += v,
... def add_l(self, v):
... self.l += [v]
...
>>> a = A()
>>> a.t, a.l, A.t, A.l
((0,), [0], (0,), [0])
>>> a.add_t(1)
>>> a.add_l(1)
>>> a.t, a.l, A.t, A.l
((0, 1), [0, 1], (0,), [0, 1])

Serge
17.12.2016
16:39:37
>>> class A:
... t = 0,
... l = [0]
... def add_t(self, v):
... self.t += v,
... def add_l(self, v):
... self.l += [v]
...
>>> a = A()
>>> a.t, a.l, A.t, A.l
((0,), [0], (0,), [0])
>>> a.add_t(1)
>>> a.add_l(1)
>>> a.t, a.l, A.t, A.l
((0, 1), [0, 1], (0,), [0, 1])
Я ничего не понял

Zart
17.12.2016
16:39:45
это иллюстрация твоих слов

Serge
17.12.2016
16:39:47
Очень тяжко такое с трубы читать
Если такое поведение не нужно, то лист нельзя
Если стоит лист, значит подразумевается, что где-то подобное может понадобиться

Zart
17.12.2016
16:41:24
демонстрация разного поведения туплов и листов как полей класса при инплейс модификациях

Dmitry
17.12.2016
16:54:17

Aleksandr
17.12.2016
16:58:54
@zartsoft однако
class Foo:
t = (0,)
a = Foo()
Foo.t += (1,)
print(a.t)
Покажет 0, 1 :)

Zart
17.12.2016
16:59:23
и что?