我最近开始学习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
答案 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']
编码愉快。...