我正在尝试从列表中删除奇数索引元素(其中零被认为是偶数)但是以这种方式删除它们将无法工作,因为它会抛弃索引值。
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
如何迭代我的列表并干净地删除那些奇数索引的元素?
答案 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))
这种方法有创建新列表的开销。