Python:无法替换列表中的项目,原因是:TypeError:列表索引必须是整数或切片,而不是 str
Posted
技术标签:
【中文标题】Python:无法替换列表中的项目,原因是:TypeError:列表索引必须是整数或切片,而不是 str【英文标题】:Python: Can't replace item inside list due to: TypeError: list indices must be integers or slices, not str 【发布时间】:2021-08-23 05:41:16 【问题描述】:我正在尝试编写一个代码,用于检查列表中的某个项目并用人工输入替换该项目的所有实例。我是 python 新手,正在尝试制作一个与此类似的函数
fruits = ["Banana", "Apple", "Watermelon", "Apple"]
print(fruits)
findFruit = input("Fruit: ")
replaceFruit = input("Replace: ")
for findFruit in fruits:
fruits[findFruit] = [replaceFruit]
print(fruits)
【问题讨论】:
【参考方案1】: 您需要索引才能用循环替换列表中的元素 不要将迭代参数命名为findFruit
,因为它已经是你的变量了
fruits = ["Banana", "Apple", "Watermelon", "Apple"]
findFruit = "Banana" # input("Fruit: ")
replaceFruit = "Kiwi" # input("Replace: ")
for idx, fruit in enumerate(fruits):
if fruit == findFruit:
fruits[idx] = replaceFruit
列表理解
fruits = [fruit if fruit != findFruit else replaceFruit for fruit in fruits]
【讨论】:
【参考方案2】:您需要指定项目的列表索引才能insert
或删除(pop
)项目
fruits = ["Banana", "Apple", "Watermelon", "Apple"]
findFruit = input("Fruit: ")
replaceFruit = input("Replace: ")
for i in range(len(fruits)):
if fruits[i] == findFruit:
fruits.pop(i)
fruits.insert(i, replaceFruit)
print(fruits)
输出
Fruit: Apple
Replace: Orange
['Banana', 'Orange', 'Watermelon', 'Orange']
【讨论】:
【参考方案3】:你必须试试这个,它会替换所有匹配的水果:
fruits = ["Banana", "Apple", "Watermelon", "Apple"]
print(fruits)
findFruit = input("Fruit: ")
replaceFruit = input("Replace: ")
for i in range(len(fruits)):
if fruits[i]==findFruit:
fruits[i] = replaceFruit
print(fruits)
【讨论】:
【参考方案4】:我试图与您的原始示例保持一些接近。 (请注意,此解决方案只会替换第一次出现的 findFruit。)
fruits = ["Banana", "Apple", "Watermelon", "Apple"]
print(fruits)
findFruit = input("Fruit: ")
replaceFruit = input("Replace: ")
try:
positionToReplace = fruits.index(findFruit)
except:
positionToReplace = -1
if positionToReplace >= 0:
fruits[positionToReplace] = replaceFruit
print(fruits)
【讨论】:
【参考方案5】:enumerate
是您正在寻找的。它基本上是一一提到元素。 enumerate()
方法将计数器添加到可迭代对象并返回它(枚举对象)。
fruits = ["Banana", "Apple", "Watermelon", "Apple"]
print(fruits)
findFruit = input("Fruit: ")
replaceFruit = input("Replace: ")
for idx, fruit in enumerate(fruits):
if fruit == findFruit:
fruits[idx] = replaceFruit
【讨论】:
以上是关于Python:无法替换列表中的项目,原因是:TypeError:列表索引必须是整数或切片,而不是 str的主要内容,如果未能解决你的问题,请参考以下文章
url 中的特殊字符 % # & = ? / + 无法被后端解析问题分析及解决方法