Как найти конкретное вхождение элемента списка в строку? - PullRequest
2 голосов
/ 04 апреля 2019

Я могу найти информацию о нахождении элементов в списке за весь день, но этот, кажется, ускользает от форумов (я думаю, потому что есть более простой способ сделать это - какой-то метод, который я еще не изучил).

Я занимаюсь практической проблемой и не могу понять: в моей функции мне нужно проверить два списка, чтобы увидеть, присутствует ли какой-либо из их элементов (которые являются строками) на входе (также строка),Более того, если существует более одного вхождения, мне нужно определить последнее для моего оператора if.

Извините - я знаю, что это ужасное объяснение, но мне трудно описать его.Я покажу свой код.

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

Так что это берет различные венгерские слова и объединяет их с соответствующим суффиксом, основанным на том, какой тип (передний или задний) гласного находится в слове (ввод строки).Проблема в словах с двумя гласными в одном или обоих списках - я не могу понять, как найти последний экземпляр элементов списка в заданной входной строке.

Я уже пытался поиграться снайти метод и использовать диапазоны - я признаю, что это выходит за рамки моих ограниченных знаний, и мне нужна помощь.Еще раз спасибо.

   front = ['e', 'é', 'i', 'í', 'ö', 'ő', 'ü', 'ű']
   back = ['a', 'á', 'o', 'ó', 'u', 'ú']

   def dative(word):
       for i in word:
           if i in front:
               return word+'nek'
           if i in back:
               return word+'nak'

Например: вход «virág» должен быть выведен как «virágnak», но он попадает в «i», так как это первое вхождение индекса и выводит «virágnek».

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Ваш код работает только для первого вхождения, но вы хотите, чтобы он работал в последнем.

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

Пример:

for i in reversed(word):
0 голосов
/ 04 апреля 2019

Как уже говорилось в другом ответе, вы можете поменять слово, прежде чем перебирать буквы (используя reversed()).

Я также предлагаю несколько изменений в вашем коде для учетаслучаи, когда совпадение не найдено (я использовал оператор break для выхода из цикла):

front = ['e', 'é', 'i', 'í', 'ö', 'ő', 'ü', 'ű']
back = ['a', 'á', 'o', 'ó', 'u', 'ú']

def dative(word):
    suffix = ''
    for i in reversed(word):
        if i in front:
            suffix = 'nek'
            break
        if i in back:
            suffix = 'nak'
            break

    return '{}{}'.format(word, suffix)

Это работает, как и ожидалось (я не знаю, являются ли эти слова правильными, но они показывают, чтофункция делает то, что должна делать):

>>> dative('virág')
virágnak
>>> dative('vireg')
viregnek
>>> dative('virug')
virugnak
>>> dative('vrg')            # no suffix added
vrg

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...