我试图从列表中删除所有其他元素,它不起作用

时间:2017-05-25 13:24:46

标签: python

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] 提前谢谢。

4 个答案:

答案 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