Python列表删除首至第二个0间元素报错及解决咨询
问题分析与解决
错误原因
你代码里的' '.join(L)会报错,因为join()方法只能拼接字符串序列,但你的列表L里存的是整数(通过int(x)转换来的),直接把整数列表传给join(),就会触发「期望字符串实例,却得到整数」的类型错误。
而且就算你把L转成字符串列表,后面的逻辑也有问题:(' '.join(L)).find('0', ...)返回的是字符串里的字符位置,不是列表的索引,不能直接用L.index()去匹配这个数值(因为这个数值是字符串中的下标,和列表索引完全不是一回事)。
正确实现方式
要删除第一个0到第二个0(包含两者)的所有元素,核心是准确找到两个0的列表索引,然后用切片删除:
L = [int(x) for x in input().split()] # 找到第一个0的索引 first_idx = L.index(0) # 从第一个0的下一位开始找第二个0的索引 second_idx = L.index(0, first_idx + 1) # 切片删除:因为切片是左闭右开,所以结束索引要+1才能包含第二个0 L[first_idx : second_idx + 1] = [] print(L)
测试示例
输入:1 0 2 3 0 4
输出:[1, 4]
额外提示
如果输入的列表里不足两个0,L.index(0, first_idx + 1)会抛出ValueError,可以加个判断避免报错:
L = [int(x) for x in input().split()] zero_count = L.count(0) if zero_count >= 2: first_idx = L.index(0) second_idx = L.index(0, first_idx + 1) L[first_idx : second_idx + 1] = [] print(L)
内容的提问来源于stack exchange,提问作者RealGonPC
相关产品推荐
相关产品推荐

