• Сложить значения одинаковых ключей множества словарей объеденённых списком?

    JaxxDexx
    @JaxxDexx
    from collections import Counter
    
    a = ({'Петя': 6, 'Вася': 8, 'Дима': 11, 'Юля': 3}, {'Петя': 5, 'Вася': 36, 'Дима': 4, 'Юля': 8}, {'Петя': 54, 'Вася': 21, 'Дима': 22, 'Юля': 39}, {'Петя': 61, 'Вася': 48, 'Дима': 71, 'Юля': 73})
    c = Counter()
    for d in a:
        c.update(d)
    Ответ написан
    1 комментарий
  • Как убрать нулевые строки и колонки из двух-мерной матрицы?

    adugin
    @adugin Куратор тега Python
    list(zip(*filter(any, zip(*filter(any, matrix)))))

    UPD Вынесу из комментов окончательный вариант:
    def trim(matrix):
        fltr = lambda matrix: zip(*filter(any, matrix))
        return [list(row) for row in fltr(fltr(matrix))]
    
    matrix = trim(matrix)
    Ответ написан
    4 комментария
  • Какова политика ресурса в отношении неграмотных ответов?

    С другой, раньше можно было безграмотного юзера, лезущего со своими советами, просто обозвать идиотом и не париться.
    Можно указать недостатки неграмотного ответа не нарушая правила. От этого даже будет реальная польза - человек поймёт где ошибся, другие читатели увидят указанные недостатки и смогут оценить их значимость. А от обзывательства пользу только вы получите и то сомнительную.
    Проблема не в неграмотных ответах и не в правилах ресурса, а в вас.

    P.S. Раньше тоже ругаться нельзя было.
    Ответ написан
    Комментировать
  • Почему не работает функция преобразование списка?

    @fireSparrow
    Работает для третьей версии питона:
    def modify_list(l):
        tmp = [el for el in l if not el%2]
        l.clear()
        l.extend(tmp)
        for i in range(len(l)):
            l[i] //= 2
        
        
    l = [int(i) for i in input().split()]
    modify_list(l)
    print(l)


    PS: Кстати, PEP8 настоятельно рекомендует никогда не использовать l в качестве однобуквенного имени переменной. Лучше использовать другое имя, или, в крайнем случае, использовать заглавную L.

    Never use the characters 'l' (lowercase letter el), 'O' (uppercase letter oh), or 'I' (uppercase letter eye) as single character variable names.

    In some fonts, these characters are indistinguishable from the numerals one and zero. When tempted to use 'l', use 'L' instead.
    Ответ написан
    3 комментария
  • Язык программирования для 40летнего начинающего?

    Dit81
    @Dit81
    Security researcher, pentester, internet-marketer
    Начните с Python! Он прост, доступен и применяется почти везде... Потом скорее всего и останетесь на нем...
    Ответ написан
    5 комментариев
  • Какие книги почитать по функциональному программированию?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Функциональное программирование
    Седой и строгий
    Восприятие языка - это вопрос индивидуальный. То, что далось легко мне, может показаться сложным вам. И наоборот. Но личным опытом поделиться могу:

    У Haskell есть веское, на мой взгляд, преимущество - программы компилируются в бинарники. А минус в том, что я никогда не слышал о сколько-нибудь значимых случаях реального применения Haskell. Для восприятия он мне показался очень тяжёлым, литературу по нему можно использовать как снотворное.

    Самой простой для изучения мне показалась Scala. Мультипарадигменность языка обеспечивает более лёгкое вхождение из императивного стиля программирования. Есть замечательный учебник "Scala для нетерпеливых" Кея Хорстманна. К тому же, вакансии на scala-программистов есть даже в РФ. Минусом для меня послужила как раз мультипарадигменность. Нет вызова, нет настоящей мозголомки, способствующей перекраиванию мышления.

    Erlang интересный, чисто функциональный, широко применяются. Но чувствуется некоторая незаконченность языка и отовсюду выпирает телекоммуникационное наследие. Есть неплохой учебник на русском Чезарини и Томпсона "Программирование в Erlang". Плюс, сейчас появился Elixir. Слышал, что он хорош и, что в нём решили все проблемы Erlang, но сам не щупал.

    Я в результате остановился на Clojure. Кложа сложная, но она реально учит думать по-новому. По ней много книг. В том числе есть на русском - "Программирование на Clojure" Эмерика. Хорошая документация, большое и дружелюбное сообщество. В реальном мире применяется чаще, чем Haskell, но реже Scala или Erlang.
    Ответ написан
    6 комментариев
  • Как записать путь ключей в словере python?

    @Darkzenon Автор вопроса
    Нагуглил ))

    import operator
    from functools import reduce

    path = ('folder','attrs','music','a')
    value = reduce(operator.getitem, path , JsonData)
    Ответ написан
    Комментировать
  • Как решить задачу «Номер появления слова»?

    qlkvg
    @qlkvg
    python backend developer
    Не решение для учебной задачи, но знать полезно
    from collections import Counter
    a = "one two three one"
    Counter(a.split())
    Ответ написан
    Комментировать
  • Как начать учить Python 3?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    C 2016-го ничего не поменялось. Берём букварь "Изучаем Python" Лутца, читаем, экспериментируем с примерами.
    Ответ написан
    3 комментария
  • Как создавали сайты до Django и вообщем без фреймворков?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    /me достаёт гусли, усаживается в позу сказителя

    Сначала мы писали CGI-скрипты. Тогда ещё не на Python, на Perl. Это было время сильных мужчин. Тогда нельзя было быть web-программистом и не знать наизусть протокол HTTP. Впрочем, как и многое другое. Тогда ещё не было шаблонизаторов и html-код мы выводили пелёнкой принтов с экранированными строками. Не было ORM, с базой данных общались SQL-запросами. Не знать SQL тоже было нельзя. Потом был mod_perl. Потом FastCGI. А потом уже Python с WSGI. Если вы хотите разобраться в web-программировании без фреймворков, то на uWSGI вам и стоит обратить внимание. CGI-скрипт на Python тоже написать можно, но этот интерфейс уже не актуален.
    Ответ написан
    Комментировать
  • Как в python сложить два слова?

    Astrohas
    @Astrohas
    Python/Django Developer
    new = ["great" + name for name in names]
    Ответ написан
    Комментировать
  • Как решить проблему с концентрацией?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    У Вас проблемы психологического характера. Почему Вы ищите ответ на it ресурсе? Даже если у кого-то что-то подобное было, причины могут быть иные. Их очень много и то что Вам посоветуют, не зная реальных причин, может не только не помочь, но и усугубить проблему. Просто сходите к специалисту. Он найдет причину и даст совет. Не шутите с такими вещами, на ранних стадиях лечится все и просто, затянете и может быть печалька, очень, очень большая печалька.
    Еще раз:
    проблемы с пк или по - на тостер
    проблемы со здоровьем - к доктору.
    Ответ написан
    Комментировать
  • Тупиковое и медленное развитие, лекарство?

    Konstantin18ko
    @Konstantin18ko
    Стоматолог
    Хочешь быстро выкачивать в продакшен? Вруби режим Vanille. Пиши, параллельно свой проект. Зацепись за один язык как основной и дальше учи всё в нем вдоль и поперёк. Затем, как всё выучишь, хватай самый сложный фраемворк и от сложного к простому начинаешь разбирать. Это мой подход.
    Для наглядной статистики: я врач, у меня 8 часовой рабочий день. С сентября 2016 начал изучать PHP и JavaScript. С 1 января по 9 января 2017 пишу програму которая помогала мне писать истории больных. Сейчас программа пользуется популярностью и ей пользуется вся ординаторская. Сейчас проект переписывается на Symfony 3.
    Что мне понадобилось: время после работы, интернет.
    Ответ написан
    22 комментария
  • Как эффективно и не теряя времени дорасти до трудоустройства web-разработчиком?

    @JuniorNoobie
    Сижу в поддержке, пишу мелкие проекты
    Уже не в первый раз встречаю людей, которым нужен стимул для продвижения. Людей, которые ищут себе ментора, да еще и не за бесплатно. Зачем все так усложнять? Хочешь работать по специальности? Иди ищи работу. Хочешь протирать штаны, смотря всякие курсы? Сиди и протирай.

    Сейчас на техников или, как сейчас модно говорить, джуниоров берут кого угодно, откуда угодно и как угодно. Всегда проще схватить пустой стакан на полный рабочий день с низкой зарплатой и заполнить тем, что так необходимо в работе именно в этой компании. Не понимаю робости перед собеседованием. Максимум, что вам там сделают это откажут.
    Ответ написан
    Комментировать
  • Как отсортировать символы строки в порядке "AaBbCc..." в python?

    @fireSparrow
    Один вариант вам уже подсказали, а я бы сделал иначе, без забивания всего алфавита в код:
    key = lambda c: (c.lower(), c.islower())
    print(''.join(sorted(s, key=key)))
    Ответ написан
    Комментировать
  • Как правильно спроектировать Laravel приложение с уклоном в enterprise?

    SowingSadness
    @SowingSadness
    web-разработчик
    Сейчас напишу немного высокомерно, но опыт позволяет. Уже почти 20 лет в разработке и около 15 в веб.
    Надо понимать, что почти все кто используют многочисленные Фреймворки не понимают что такое ООП. А уж тем более, что такое SOLID и т.д.
    И поэтому, что бы они не писали, в конце-концов превращается в какашку с костылями.
    Да, потом героически проект переписывается с учётом изменений (или ещё чаще умирает) Но, он по прежнему остаётся абсолютно не расширяемым и не поддерживаемым.

    И вот мы возвращаемся к Фреймворкам.
    Нужно брать тот Фреймворк, который писали с учётом определённых парадигм и принципов. Так как этих вот парадигм, достаточно описанных и изученных не так много (на самом деле их 2.5 штуки), то можно сразу ориентироваться на ООП + MVC(или MVP или MVVM) + SOLID
    Если Фреймворк что-то из этого нарушает, то он по умолчанию не может вам дать возможность написать хорошее, расширяемое приложение. А хороший Фреймворк, даже начинающим программистам должен прививать правильные подходы к разработке. Что-бы хочешь, не хочешь, а hello world уже не превращался в ад.

    Сразу оговорюсь, что я давно "забил" на Фреймворки. Есть один идеальный — это Pyramid. А оцениваю любой продукт по документации. Там сразу видны все огрехи и косяки. Буду писать и параллельно смотреть в доки.

    Larvel
    Первое что я вижу в этом Фреймворке, что большая часть работы каркасных компонентов завязана на статических вызовах. На этом можно уже, даже и остановиться. ООП, по большому счёту тут нет. Суть ООП в использовании объектов. Тут же класс выступает в качестве пространства имён функций.
    Раз нет ООП, то и нет всей теории и принципов связанных с ним.
    А раз под этим Фреймворком не заложено никакой теории, то в 99% случаев можно сказать, что на нём что-то правильно, написать невозможно.

    Если взглянуть глубже, то открывается ещё больше ада:
    ActiveRecord.
    Плох по умолчанию. С ним очень тяжело контроллировать целостность данных. Вам нужно придумать слой абстракции, где вы будете транзакционно записывать все данные вне бизнес логики. Фреймворк вам тут не поможет. Он предложит это делать в экшене (контроллере). И тут вы столкнётесь, что при написании чего-то сложнее чем бложик, вы будете терять целостность. Ибо бизнес логика и работа БД будет в одном методе. Отладка будет усложняться, ошибок плодиться и т.д.
    И не зависит это от программистов. Шаблон сам по себе провоцирует ошибаться.
    Далеко за примерами ходить не нужно, уже треш.

    Чем больше примеров я смотрю, тем больше не понимаю, как все это дело расширять. Как вставлять прозрачно через весь проект свои собственные аспекстные решения. Например RBAC. Или, если нужно, логику работы приложения отделить от БД и когда нужно, подставлять необходимую реализацию.
    Или сделать работу всех экшенов в рамках клиента, но производить авторизацию по пользователю(сотруднику)

    Все это предлагается зашивать прям в контроллерах, с помощью protected или private методов.
    Повеситься. Сложность приложения зашкалит.

    Symfony
    Только при выходе 2 версии я работал с этим чудом. Разработчики писали его под хапйом dependency injection. Мало того, что они взяли не самую хорошую стратегию для реализации всего костяка фреймворка, так ещё и сделали её не правильно.
    Они написали универсальный DI Container и кладут в него все что угодно, используя в качестве идентификатора строчку.
    Строчку, М**Ь ЕЁ! Не интерфейс — строчку!
    И знаете чем это аукнется? А тем, что при разработке своего приложения или очередного бандла, вам будет говорить, что в контейнере лежит что-то не то и вы подохните в конфигурационных настройках. А все потому что, подход: ВСЁ через DIC — строго навязывается.
    Расширение этого чуда, тоже причинит вам массу головной боли. Ведь, зачастую, вы будете работать с классами, которые ждут не интерфейс, а что-то из контейнера с ключём "я_твой_дом_шатал".

    Проблема с внедрением аспектов сквозь весь фреймворк, никуда не пропадает. Но тут по другой причине. Сложность платформенных компонентов зашкаливает. Все пишется с завязкой на конкретную реализацию, но получают все по строчке из DIC.
    Потому что это центральная концепция. Другой нет.

    Но, по правде говоря, слепить что-то годное возможность есть.
    Если взять микро ядро symfony, прикрутить Doctrine, то получится что-то годное.
    Но встаёт вопрос. А зачем вообще symfony, если можно взять doctrine и написать все остальное свое?
    И тут вы окажетесь правы — незачем.

    Ситуация с Symfony в enterprise очень схожа с ситуацией с Django. Повидал уже с десяток проектов, где последнюю брали для больших приложений. В итоге от Django оставались рожки да ножки. Всю её переписывали.
    Спрашивается — и зачем? Просто потратили кучу времени.

    Так что, если нужен суровый enterprise. Что бы писать что-то большое, с возможностью расширения — берите Pyramid и переходите на python.
    Ничего, даже близко с пирамидкой, по возможностью расширения, даже близко не лежало.
    Ответ написан
    33 комментария
  • Для чего нужен random.seed(x) python?

    LazyTalent
    @LazyTalent
    Data Engineer, Freelancer
    Все дело в том, что в Питоне, как и в любом другом языке, используется т.н. генератор псевдо случайных чисел. Т.е. random выдает не случайное число, а число которое вычисляется алгоритмом на осное другого числа, по умолчанию это текущее время. random.seed позволяет изменить число, которое передается в random для генерации случайного числа, а т.к. "случайные" числа выдаются одним и тем же алгоритмом, то при одинаковом параметре в random.seed будут и одинаковые "случайные" числа.
    >>> import random
    >>> ['%.2f' % random.random() for i in range(10)]
    ['0.21', '0.66', '0.18', '0.48', '0.86', '0.46', '0.48', '0.04', '0.67', '0.37']
    >>> 
    >>> ['%.2f' % random.random() for i in range(10)]
    ['0.90', '0.68', '0.02', '0.90', '0.63', '0.06', '0.22', '0.14', '0.97', '0.68']
    >>> 
    >>> random.seed(5)
    >>> ['%.2f' % random.random() for i in range(10)]
    ['0.62', '0.74', '0.80', '0.94', '0.74', '0.92', '0.03', '0.47', '0.94', '0.65']
    >>> 
    >>> random.seed(5)
    >>> ['%.2f' % random.random() for i in range(10)]
    ['0.62', '0.74', '0.80', '0.94', '0.74', '0.92', '0.03', '0.47', '0.94', '0.65']
    Ответ написан
    4 комментария
  • Практика по django?

    Привет

    Я, конечно, не совсем по теме, но чтобы более менее понять Django, я начал делать свой сайт. Так с ростом функционала и требований рассматривал новые фишки и постепенно наращивал жир (Гео, Селери, Рест, интеграции с робокассой и так далее). А просто так взять готовый проект и рыться в нем - ну это спорно.
    Ответ написан
    1 комментарий
  • Почему в Питоне нельзя складывать строки?

    @screen_sailor
    The Screen Is Not Enough
    Наверно, они предпочитают через метод format писать.
    print('We are the {} who say "{}!"'.format('knights', 'Ni'))
    Ответ написан
    6 комментариев