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的主要内容,如果未能解决你的问题,请参考以下文章

Python替换字符串中的空格

url 中的特殊字符 % # & = ? / + 无法被后端解析问题分析及解决方法

Python 替换列表 list 及字符串中的元素

如何在 Python 中更改列表中的项目?

转换我的列表有我无法在 python 中替换的 unicode 字符串

替换python中重复项列表中的一个特定重复项