Добавить букву в конец каждой строки в списке в python - PullRequest
1 голос
/ 30 апреля 2020

Мне нужно превратить эти слова в прошедшее время, добавив либо ad, либо ed в конец каждого из них в списке, в зависимости от того, заканчивается ли слово буквой «e» или нет. Я пытаюсь поместить их во второй список слов прошедшего времени.

Я пытаюсь работать с базовыми c знаниями, которые у меня уже есть. Это приводит к ошибке в строке .append, говоря, что индексы списка должны быть целыми числами, а не строками. Я немного застрял, есть мысли?

words = ["adopt", "bake", "beam", "confide", "grill", "plant", "time", "wave", "wish"]
past_tense = []

for i in words:    
    if i[-1] == 'e':
        past_tense.append(words[i] + 'd')
    else:
        past_tense.append(words[i] + 'ed')

Ответы [ 7 ]

3 голосов
/ 30 апреля 2020

Ваше отношение к i как к индексу с words[i]. i - это слово, когда вы делаете for i in words:. Заменить i на word будет гораздо понятнее. Тогда вас не смущают индексы и слова.

words = ["adopt", "bake", "beam", "confide", "grill", "plant", "time", "wave", "wish"]
past_tense = []

for word in words:    
    if word[-1] == 'e':
        past_tense.append(word + 'd')
    else:
        past_tense.append(word + 'ed')

print(past_tense)
# ['adopted', 'baked', 'beamed', 'confided', 'grilled', 'planted', 'timed', 'waved', 'wished']

Мы могли бы также использовать понимание списка:

past_tense = [word + 'd' if word[-1] == 'e' else word + 'ed' for word in words]

print(past_tense)
# ['adopted', 'baked', 'beamed', 'confided', 'grilled', 'planted', 'timed', 'waved', 'wished']
3 голосов
/ 30 апреля 2020

При выполнении for i in words на самом деле i будет одним элементом массива words, поэтому слово

Вам не нужен индекс в массиве, просто значение

for word in words:    
    if word[-1] == 'e':
        past_tense.append(word + 'd')
    else:
        past_tense.append(word + 'ed')

Использование списка:

past_tense = [word + ('d' if word[-1]=='e' else 'ed') for word in words]
3 голосов
/ 30 апреля 2020
for i in words: 

Это повторяет каждое слово в списке слов. Так что это не целое число, i теперь является строкой. поэтому words[i] исправит полученную ошибку.

Рабочий код:

words = ["adopt", "bake", "beam", "confide", "grill", "plant", "time", "wave", "wish"]
past_tense = []

for index,word in enumerate(words):    
    if word[-1] == 'e':
        past_tense.append(words[index] + 'd')
    else:
        past_tense.append(words[index] + 'ed')
2 голосов
/ 30 апреля 2020

Устраивайтесь по списку:

past_tense = [word + ("d" if word.endswith("e") else "ed")
              for word in words]
print(past_tense)

Что дает

['adopted', 'baked', 'beamed', 'confided', 'grilled', 'planted', 'timed', 'waved', 'wished']


"Старый стиль":
for word in words:
    if word.endswith("e"):
        past_tense.append(word + "d")
    else:
        past_tense.append(word + "ed")

Или даже :

for word in words:
    suffix = "d" if word.endswith("e") else "ed"
    past_tense.append(word + suffix)
1 голос
/ 30 апреля 2020

Все эти ответы отвечают на ваш прямой вопрос, но если вы ищете более общий способ определения формы глагола в прошедшем времени (например, «дать» для «дал»), более нюансированная библиотека будет в состоянии справиться с этим с более высокой точностью. NodeBox хороший.

python3 -m pip install pattern

Тогда, как объяснено здесь , вы можете использовать пакет en для спряжения глаголов.

from pattern.en import conjugate
past_tense = []

for word in words:
    past_tense.append(conjugate(word, tense='past'))
1 голос
/ 30 апреля 2020

Когда вы делаете for i in words:, вы фактически устанавливаете 'i' как фактический элемент (в данном случае слово) из списка слов, так что вы можете видеть, что 'i' является строкой, а не целым числом.

Ваша ошибка исходит из этой строки:

past_tense.append(words[i] + 'd')

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

Таким образом, ваш код должен быть:


words = ["adopt", "bake", "beam", "confide", "grill", "plant", "time", "wave", "wish"]
past_tense = []

for i in words:    
    if i[-1] == 'e':
        past_tense.append(i + 'd')
    else:
        past_tense.append(i + 'ed')

Или если вы используете for i in range(0,len(words)):, что означает, что 'i' будет go от 0 до длины списка слов -1:

words = ["adopt", "bake", "beam", "confide", "grill", "plant", "time", "wave", "wish"]
past_tense = []

for i in range(0,len(words)) :    
    if words[i][-1] == 'e':
        past_tense.append(words[i] + 'd')
    else:
        past_tense.append(words[i] + 'ed')
1 голос
/ 30 апреля 2020

Вот то, что вы ищете, просто нужно несколько настроек (см. Комментарии):

words = ["adopt", "bake", "beam", "confide", "grill", "plant", "time", "wave", "wish"]
past_tense = []

for word in words:
# changed i to word, to reflect what the variable will actually contain.
    if word.endswith('e'):
    # endswith is a nice string method that makes the code very readable.
        past_tense.append(word + 'd')
    else:
        past_tense.append(word + 'ed')

Результат:

>>> print(past_tense)
['adopted', 'baked', 'beamed', 'confided', 'grilled', 'planted', 'timed', 'waved', 'wished']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...