如何解决类型错误:“列表索引必须是整数或切片,而不是str”

时间:2019-08-20 18:34:08

标签: python python-3.x list

我最近开始学习python,但我还不是很擅长。 在尝试从列表中简单删除项目时,我偶然发现了以下问题:“列表索引必须是整数或切片,而不是str”。尽管我通常了解问题的含义,但仍然看不到我做错了什么。这是代码:

list1=["1","2","4","5","3"]

for i in list1:
    if list1[i] in ["3"]:
        list1.pop(i)
        break
print(list1)

这是完整的错误:

  

TypeError Traceback(最近一次呼叫最近一次)在4中,用于list1中的i:----> 5,如果list1 [i]在[“ 3”]中:6 list1.pop(i)

     

TypeError:列表索引必须是整数或切片,而不是str

5 个答案:

答案 0 :(得分:0)

在原始的for循环中,您要遍历列表的每个元素,这些元素都是字符串。您收到的错误提示您不能按字符串对列表进行切片,而需要按整数进行切片。我建议按索引切片。

为此,您只需更改for循环的开始行:

for i in range(len(list1)):

现在它应该可以正常工作了,因为它遍历了列表的索引(即0、1、2、3、4)。

答案 1 :(得分:0)

您似乎误解了for-loop如何遍历您的列表。

根据您的代码在列表中进行迭代,而不是创建用于访问列表中元素的索引。如果要向我们提供索引,则应该使用range()

list1=["1","2","4","5","3"]

for i in range(len(list1)):
    if list1[i]== "3":
        list1.pop(i)
        break
print(list1)

答案 2 :(得分:0)

当您执行

之类的操作时
for i in list1

i获取列表中元素的值,所以我变成了“ 1”,“ 2”等。这些都是字符串,您不能用字符串索引列表。你最好做类似的事情

for elem in list1:
    if elem in ['3']: ...

当然,如果您只想从列表中删除元素,则可以使用:

if elem in list1:
    list1.remove(elem)

答案 3 :(得分:0)

list1是字符串列表。这是因为数字在其两边带有引号-" "

在for循环中,您正在遍历这些字符串,循环i的每次迭代均设置为字符串“ 1”,然后设置为“ 2” ...

调用pop(i)时,您要向其传递一个字符串,但是您需要传递一个整数。

编辑:删除了原始解决方案,因为它是完全错误的。以下是正确的解决方案。

打印程序中正在运行的内容可能会有所帮助,例如在循环中,您可以

print(i, type(i))

帮助跟踪发生的事情。

不确定这样做的最终目的是什么,但是有很好的干净方法来跟踪您的目标。

for i, element in enumerate(list):

将使您可以同时访问当前元素和当前迭代。

在您的示例中使用它看起来像:

list1 = ["1", "2", "4", "5", "3"]
for i, element in enumerate(list):
    if element == "3":
        list.pop(i)
        break




答案 4 :(得分:0)

执行以下操作:

list1 = ["1","2","4","5","3"]

for index,value in enumerate(list1):
    if value in ["3"] : # this condiation can be (value in ["3","2"])
        list1.pop(index)
        break
print(list1)

结果是['1', '2', '4', '5']

编码愉快。...