此函数假定将字符串列表中的每个单词都打印为小写(我通过修改原始列表来实现),但出现错误:
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'])
答案 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.