从Python中的列表中删除奇数索引元素

时间:2015-03-05 17:15:30

标签: python list elements

我正在尝试从列表中删除奇数索引元素(其中零被认为是偶数)但是以这种方式删除它们将无法工作,因为它会抛弃索引值。

lst = ['712490959', '2', '623726061', '2', '552157404', '2', '1285252944', '2', '1130181076', '2', '552157404', '3', '545600725', '0']


def remove_odd_elements(lst):
    i=0
    for element in lst:
        if i % 2 == 0:
            pass
        else:
            lst.remove(element)
        i = i + 1

如何迭代我的列表并干净地删除那些奇数索引的元素?

2 个答案:

答案 0 :(得分:15)

您可以使用slice

一次性删除所有奇数项目
del lst[1::2]

演示:

>>> lst = ['712490959', '2', '623726061', '2', '552157404', '2', '1285252944', '2', '1130181076', '2', '552157404', '3', '545600725', '0']
>>> del lst[1::2]
>>> lst
['712490959', '623726061', '552157404', '1285252944', '1130181076', '552157404', '545600725']

迭代时,您无法从列表中删除元素,因为删除项目时列表迭代器不会调整。请参阅Loop "Forgets" to Remove Some Items尝试时会发生什么。

另一种方法是使用提供索引的list comprehension enumerate()构建一个新的列表对象来替换旧的列表对象:

lst = [v for i, v in enumerate(lst) if i % 2 == 0]

这个保持偶数元素,而不是删除奇数元素。

答案 1 :(得分:1)

由于你想要消除奇数项并保持偶数项,你可以使用如下过滤器:

>>>filtered_lst=list(filter(lambda x : x % 2 ==0 , lst))

这种方法有创建新列表的开销。