изменение исходного списка с каждым словом в нижнем регистре

#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']