从 Python 中的列表中删除奇数索引元素
Remove odd-indexed elements from list in Python
我正在尝试从我的列表中删除奇数索引元素(其中零被认为是偶数)但是以这种方式删除它们是行不通的,因为它会丢弃索引值。
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
如何遍历我的列表并彻底删除那些奇数索引元素?
您可以使用 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 with enumerate()
提供索引:
lst = [v for i, v in enumerate(lst) if i % 2 == 0]
这保留偶数元素,而不是移除奇数元素。
由于您要消除奇数项并保留偶数项,您可以使用如下过滤器:
>>>filtered_lst=list(filter(lambda x : x % 2 ==0 , lst))
此方法具有创建新列表的开销。
我正在尝试从我的列表中删除奇数索引元素(其中零被认为是偶数)但是以这种方式删除它们是行不通的,因为它会丢弃索引值。
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
如何遍历我的列表并彻底删除那些奇数索引元素?
您可以使用 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 with enumerate()
提供索引:
lst = [v for i, v in enumerate(lst) if i % 2 == 0]
这保留偶数元素,而不是移除奇数元素。
由于您要消除奇数项并保留偶数项,您可以使用如下过滤器:
>>>filtered_lst=list(filter(lambda x : x % 2 ==0 , lst))
此方法具有创建新列表的开销。