修改每个单词为小写的原始列表

时间:2019-03-18 06:17:08

标签: python

此函数假定将字符串列表中的每个单词都打印为小写(我通过修改原始列表来实现),但出现错误:

  

builtins.TypeError:列表索引必须是整数或切片,而不是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']) 

3 个答案:

答案 0 :(得分:1)

罪魁祸首

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

答案 1 :(得分:1)

编写strings[word]时,它期望word是索引而不是您要查找的实际值。 实现此结果的更好方法是使用列表理解,如下所示:

upper_case = ['Right', 'SAID', 'Fred']
lower_case = [x.lower() for x in upper_case]

答案 2 :(得分: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.