#python
#python
Вопрос:
предполагается, что эта функция принимает каждое слово в списке строк и печатает их в нижнем регистре (я делаю это, изменяя исходный список), но я получаю ошибку:
встроенные.Ошибка типа: индексы списка должны быть целыми числами или фрагментами, а не str
def set_lowercase(strings):
"""takes a list of strings and modifies by replacing each string with lowercase"""
for word in strings:
strings[word] = strings[word].lowercase()
print(strings)
set_lowercase(['Right', 'SAID', 'Fred'])
Ответ №1:
Когда вы пишете for
цикл с:
for word in strings:
вы выполняете итерацию по элементам strings
, которые являются вашими словами. В каждом цикле word
становится одним из ваших слов, а не его индексом.
Если вам нужно и слово, и его индекс (а он вам нужен здесь, поскольку вы хотите обновить список на месте), вы можете использовать enumerate, который будет выдавать вам на каждой итерации как слово, так и индекс:
def set_lowercase(strings):
"""takes a list of strings and modifies by replacing each string with lowercase"""
for index, word in enumerate(strings):
strings[index] = word.lower()
words = ['Right', 'SAID', 'Fred']
set_lowercase(words)
print(words)
# ['right', 'said', 'fred']
# your original list has been modified in place.
Ответ №2:
Когда вы пишете, strings[word]
ожидается word
, что это будет индекс, а не фактическое значение, которое вы ищете. Лучшим способом достижения этого результата было бы использование понимания списка следующим образом:
upper_case = ['Right', 'SAID', 'Fred']
lower_case = [x.lower() for x in upper_case]
Ответ №3:
Виновник:
strings[word] = strings[word].lowercase()
Причина:
strings[word]
если word является элементом в списке, вы не можете выполнять итерации по списку по его элементу. Кроме того, не существует такого метода, как lowercase()
но lower()
Исправление:
for i in range(len(strings)):
strings[i] = strings[i].lower()
print(strings)
Альтернатива:
Вы можете добиться того же, используя list-comprehension
:
[x.lower() for x in ['Right', 'SAID', 'Fred']]
ВЫВОД:
['right', 'said', 'fred']