Size: a a a

Сообщество Python Программистов

2021 February 13

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
Поиск подстроки это элементарный алгоритм
def find(pattern, string):
 results = []
 string_len = len(stting)
 pattern_len = len(pattern)
 for i in range(string_len-pattern_len):
   for j in range(pattern_len):
     if string[i+j]!=pattern[j]:
       break
   else:
     positions = i, i+pattern_len
     results.append(positions)
 return results
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
def find(pattern, string):
 results = []
 string_len = len(stting)
 pattern_len = len(pattern)
 for i in range(string_len-pattern_len):
   for j in range(pattern_len):
     if string[i+j]!=pattern[j]:
       break
   else:
     positions = i, i+pattern_len
     results.append(positions)
 return results
Наивный алгоритм, если что
Сложность O(string*pattern)
источник

AT

Alexander T in Сообщество Python Программистов
Бензофуран Гетероцикл
def find(pattern, string):
 results = []
 string_len = len(stting)
 pattern_len = len(pattern)
 for i in range(string_len-pattern_len):
   for j in range(pattern_len):
     if string[i+j]!=pattern[j]:
       break
   else:
     positions = i, i+pattern_len
     results.append(positions)
 return results
че-то тут этсамое. лишний вложенный цикл.
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Alexander T
че-то тут этсамое. лишний вложенный цикл.
Неа
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Хотя питон может лучше
источник

AT

Alexander T in Сообщество Python Программистов
да-а. нахера ты перебираешь посимвольно, сравни слайс с паттерном
источник

КБ

Кирилл Баст... in Сообщество Python Программистов
Бензофуран Гетероцикл
def find(pattern, string):
 results = []
 string_len = len(stting)
 pattern_len = len(pattern)
 for i in range(string_len-pattern_len):
   for j in range(pattern_len):
     if string[i+j]!=pattern[j]:
       break
   else:
     positions = i, i+pattern_len
     results.append(positions)
 return results
syntax error))))))))
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
def find(pattern, string):
 results = []
 string_len = len(string)
 pattern_len = len(pattern)
 for i in range(string_len-pattern_len):
   substr = string[i:i+pattern_len]
   if substr==pattern:
     positions = i, i+pattern_len
     results.append(positions)
 return results
источник

КБ

Кирилл Баст... in Сообщество Python Программистов
Бензофуран Гетероцикл
def find(pattern, string):
 results = []
 string_len = len(string)
 pattern_len = len(pattern)
 for i in range(string_len-pattern_len):
   substr = string[i:i+pattern_len]
   if substr==pattern:
     positions = i, i+pattern_len
     results.append(positions)
 return results
again syntax error
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Alexander T
да-а. нахера ты перебираешь посимвольно, сравни слайс с паттерном
Пока ты это писал я это и делал)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Кирилл Баст
again syntax error
Идентацию поправь
источник

JK

John K in Сообщество Python Программистов
Айван
Ну, бэкенд на питоне можно. Просто имей в виду, что питон не про фронтенд, мобилки и игры
А вы можете предложить другой ЯП?
источник

AT

Alexander T in Сообщество Python Программистов
Бензофуран Гетероцикл
def find(pattern, string):
 results = []
 string_len = len(string)
 pattern_len = len(pattern)
 for i in range(string_len-pattern_len):
   substr = string[i:i+pattern_len]
   if substr==pattern:
     positions = i, i+pattern_len
     results.append(positions)
 return results
def find(pattern, string):
   plen = len(pattern)
   return [(i, i+plen) for i in range(len(string) - plen) if string[i:i+plen] == pattern]
источник

КБ

Кирилл Баст... in Сообщество Python Программистов
Бензофуран Гетероцикл
Идентацию поправь
name stting is not defined :)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Alexander T
def find(pattern, string):
   plen = len(pattern)
   return [(i, i+plen) for i in range(len(string) - plen) if string[i:i+plen] == pattern]
Справедливо)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Только это всё ещё наивный алгоритм
источник

КБ

Кирилл Баст... in Сообщество Python Программистов
у тебя в 3 строке ошибка
источник

КБ

Кирилл Баст... in Сообщество Python Программистов
одобряю
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
Только это всё ещё наивный алгоритм
Есть более весёлый, который в худшем случае даёт такую же сложность, а в лучшем - емнип O(string/pattern)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Только на питоне он будет выглядеть как пришелец из Си)
источник