Re[2]: Кому-нибудь требуется начинающий питонист в подмастер
От: Lazytech Ниоткуда  
Дата: 05.05.19 12:21
Оценка:
Здравствуйте, a7d3, Вы писали:

A>Есть книжка:

A>«Programming Collective Intelligence. Building Smart Web 2.0 Applications» By Toby Segaran, Publisher: O'Reilly Media.

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

A>Примеры кода на питоне, а рассматриваются такие вещи, ради которых и на которых учатся программированию в современно мире. Например, как именно сделать систему рекомендаций пользователю — книг, фильмов, музыки — чтобы оно действительно работало. Это не такое скучное и оторванное от реальности, как использование пяти алгоритмов сортировки массивов встроенными средствами языка программирования. Когда про них жуют сотню страниц, но у читающего новичка не появляется осознания как это применить к системе-сервисе для повседневной жизни людей.


Вообще-то я с интересом решаю некоторые алгоритмические задачки, пробуя разные подходы с целью повысить скорость выполнения кода.
  Вот, например...
Вариант 1:
class Solution:
    def backspaceCompare(self, S: str, T: str) -> bool:

        def processBackspaces(s: str) -> str:
            s_list = list(s)
            bs_count = 0

            for i in range(len(s)-1, -1, -1):            
                if s[i] == '#':
                    s_list[i] = ''
                    bs_count += 1
                elif bs_count > 0:
                    s_list[i] = ''
                    bs_count -= 1

            return ''.join(s_list)


        return processBackspaces(S) == processBackspaces(T)


Вариант 2:
class Solution:
    def backspaceCompare(self, S: str, T: str) -> bool:
    
        def processBackspaces(s: str) -> list:
            s_list = []
            bs_count = 0

            for i in range(len(s)-1, -1, -1):            
                if s[i] == '#':
                    bs_count += 1
                elif bs_count > 0:
                    bs_count -= 1
                else:
                    s_list.append(s[i])

            return s_list


        return processBackspaces(S) == processBackspaces(T)


Вариант 3:
class Solution:
    def backspaceCompare(self, S: str, T: str) -> bool:   
        pos_S, pos_T = len(S) - 1, len(T) - 1
        count_S, count_T = 0, 0

        while True:
            while pos_S > -1:
                if S[pos_S] == '#':
                    count_S += 1
                elif count_S > 0:
                    count_S -= 1
                else:
                    break                            
                pos_S -= 1

            char_S = S[pos_S] if pos_S > -1 else ""

            while pos_T > -1:
                if T[pos_T] == '#':
                    count_T += 1
                elif count_T > 0:
                    count_T -= 1
                else:
                    break
                pos_T -= 1

            char_T = T[pos_T] if pos_T > -1 else ""

            if char_S != char_T:
                return False

            if pos_S <= 0 and pos_T <= 0:
                return True
            elif pos_S < 0 and pos_T == 0:
                return False
            elif pos_S == 0 and pos_T < 0:
                return False

            pos_S -= 1
            pos_T -= 1

        return True

По результатам тестирования скорость выполнения всех этих вариантов кода приблизительно одинакова, хотя я очень надеялся, что последний вариант будет заметно быстрее остальных.

A>Т.е. читать, набираться идей чего хотелось бы сделать — реализовывать через PyQT или онлайн ресурс собрав веб-сайтик. После этого будет о чём поговорить с людьми на интервью-собеседованиях.

A>Потенциально, в перспективе может даже появиться осознание, что незачем привязывать к конкретному языку. Что искать работу по этому принципу — это как умение работать сугубо лопатами строго одного конкретного вида-типа. Деньги платят за другое — то самое умение использовать разные подходы в некой предметной сфере, что описаны в подобных книжках.


Спасибо за полезные советы!
Отредактировано 05.05.2019 12:23 Lazytech . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.