def every_other (l):
alist = []
alist = l
for i in range (len (l)-1):
print (i)
if i % 2 == 1:
del (alist [i])
print (alist)
every_other ([0, -12, 4, 18, 9, 10, 11, -23])
输出为[0,4,18,10,11] 应该是:[0,4,9,11] 提前谢谢。
答案 0 :(得分:5)
您不能从列表中删除项目并同时迭代它,因为这会混淆迭代器。创建一个新列表并添加到它而不是从旧列表中删除项目,或者您可以使用Python的切片语法在一个操作中执行此操作:
def every_other(l):
print l[::2]
答案 1 :(得分:1)
此外,您可以使用列表理解并根据其计数过滤列表:
the_list = [0, -12, 4, 18, 9, 10, 11, -23]
new_list = [i for a, i in enumerate(the_list) if a%2 == 0]
答案 2 :(得分:0)
BufferedImage biImg = ImageIO.read(new File(imgSource));
mat = new Mat(biImg.getHeight(), biImg.getWidth(),CvType.CV_8UC3);
Imgproc.cvtColor(mat,matBGR, Imgproc.COLOR_RGBA2BGR);
byte[] data = ((DataBufferByte) biImg.getRaster().getDataBuffer()).getData();
matBGR.put(0, 0, data);
你正在删除你试图迭代的同一个列表。所以当你在索引1删除时 - 12你的新列表是[0,4,18,9,10,11,-23] 现在你到达迭代的索引2,你的值是18,所以它没有被删除,同样的逻辑继续,直到迭代完成。
答案 3 :(得分:0)
如果您只想迭代列表中的所有其他元素,则此代码应该有效;
def every_other(l):
return l[0::2]
但是,如果要删除所有其他元素,则应在打印或返回列表之前先执行此操作。
def remove_every_other(my_list):
del my_list[1::2]
return my_list