Python: Can't replace item inside list due to: TypeError: list indices must be integers or slices, not str

Python: Can't replace item inside list due to: TypeError: list indices must be integers or slices, not str

我正在尝试制作一个代码,在其中检查列表中的某个项目并将该项目的所有实例替换为人工输入。我是 python 的新手,正在尝试制作一个与此类似的功能

fruits = ["Banana", "Apple", "Watermelon", "Apple"]

print(fruits)

findFruit = input("Fruit: ")
replaceFruit = input("Replace: ")

for findFruit in fruits:
    fruits[findFruit] = [replaceFruit]
    print(fruits)
  • 您需要索引才能用循环替换列表中的元素
  • 不要命名已经是您的变量的迭代参数 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]

您需要指定项目的列表索引才能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']

你必须试试这个,它会替换所有匹配的水果:

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)

我试图在某种程度上接近您的原始示例。 (请注意,此解决方案只会替换第一次出现的 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)

enumerate 就是您要找的。它基本上是一一提到要素。 enumerate() 方法将计数器添加到可迭代对象中,并 returns 它(枚举对象)。

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