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

ave*_*eux 6 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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 21

您可以使用切片一次性删除所有奇数项目:

del lst[1::2]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

迭代时,您无法从列表中删除元素,因为删除项目时列表迭代器不会调整.请参阅循环"忘记"以删除某些项目尝试时会发生什么.

另一种方法是建立一个新的列表对象,以取代旧的,使用列表理解enumerate()提供的指标:

lst = [v for i, v in enumerate(lst) if i % 2 == 0]
Run Code Online (Sandbox Code Playgroud)

这样可以保留偶数元素,而不是删除奇数元素.

  • 哦哦,所以这个符号基本上意味着 [start:end:stride] (2认同)