2015-01-19 4 views
0

Я искал, чтобы написать программу, которая считала самую длинную алфавитную подстроку в строке. например str = 'abcdkjcd' произведет 'abcd' как самую длинную подстроку.Код подстроки подстроки Python

Используя этот сайт и некоторые объяснения и объяснения функций, я нашел ответ, который отлично поработал, однако я действительно хотел бы действительно понять код. Мое ограниченное понимание заключается в том, что он соединяет каждого символа с переменной, если он выше, чем тот, на который он смотрит в данный момент.

Я аннотировал свой код и надеялся, что кто-нибудь сможет объяснить мне 3 строки ???

s='abc' # Sets a string value 

def longeststr(str): # Defines the function to work out the longest substring 
    longest='' # Sets up a variable to store the longest value in with an empty string 

    for i in range(len(str)): # Sets up the outside for loop to repeat the instructions below for the same amount of times as elements are in the string 

     for j in range(i+1, len (str)): #For each element in the string started from the second element to the end, do the following... 

      s=str[i:j+1] # Not sure?? 

      if ''.join(sorted(s)) == s: # If when try to join a sorted list of s is equal to s? Doesn't make sense?? 

       longest = max(longest, s, key = len) # Not sure 

      else: 
       break # Exits the loop 

    return 'Longest substring in alphabetical order is:' + longest # Returns value of longest string 

Спасибо за любую помощь.

ответ

0

s = str [i: j + 1] - это очень питонская вещь, называемая срезом. В основном это подстрока от I до j + 1 от str.

if '' .join (отсортировано (ы)) == s. Если строка, которую вы в данный момент просматриваете, одинакова после сортировки в алфавитном порядке, то она находится в порядке

longest = max (longest, s, key = len). Самый длинный максимум либо s, либо сам определяется переменной Len.

0

Переменная i в примере указывает на позицию в исходной строке.

Вторая петля создает переменную j, которая указывает на позицию рядом с положением, указанным i.

s=str[i:j+1] - извлекает подстроку из исходной строки из положения i в положение j

''.join(sorted(s)) видов подстроки в алфавитном порядке. Если отсортированная подстрока равна подстроке, то это означает, что подстрока уже является алфавитной подстрокой.

Следующие просто выбирают все, что больше: значение хранится в longest переменной или len текущей подстроки.

longest = max(longest, s, key = len) 
0
s='abc' # Sets a string value 

def longeststr(str): # Defines the function to work out the longest substring, which accepts str as arg 
    longest='' # Sets up a variable to store the longest value in with an empty string 

    for i in range(len(str)): # Sets up the first loop for i iterations from 0 to the lenght of the str (for i = 0;i<len(str);i++) 
     for j in range(i+1, len (str)): #For each element next to the i-element 
      s=str[i:j+1] # slice string. eg str = 'abcd', i = 1, j=2, str[i:j+1] = 'bc'. for more information google 'python slice' So in this slice we start from fisrt and second literals, then from first and third, then ...., then from second and third and so on and on 

      if ''.join(sorted(s)) == s: # it is a little bit tricky. 

, если S = ​​'BCA' сортирует (s) даст нам 'а' и s не будет равен отсортированы (s). Но если s = 'abc', то сортировка (s) и s равны, и именно это мы ищем

   longest = max(longest, s, key = len) # according to docs: returns the largest item in an iterable or the largest of two or more arguments. if key (possible options for list.sort() function) is specified, it is used like a criteria for max function. 

      else: 
       break # Exits the loop 

    return 'Longest substring in alphabetical order is:' + longest # Returns value of longest string 
Смежные вопросы