list1 = [12,33,45,66,75,33,4,56,66,67,1,2]
for i in range(len(list1)):
x=i
if(i%2!=0):
#print(list1[x])
list1.remove(list1[x])
else:
continue
print(list1)
11.8 ms 11.9 ms 12.0 ms list1 = list1[::2]
90.1 ms 90.6 ms 91.1 ms list1 = [i for indexValue, i in enumerate(list1) if indexValue % 2 == 0]
8.0 ms 8.2 ms 8.2 ms del list1[1::2]
from timeit import repeat
setup = 'list1 = list(range(10**6))'
solutions = [
'list1 = list1[::2]',
'list1 = [i for indexValue, i in enumerate(list1) if indexValue % 2 == 0]',
'del list1[1::2]',
]
for _ in range(3):
for solution in solutions:
times = sorted(repeat(solution, setup, number=1))[:3]
print(*('%4.1f ms ' % (t * 1e3) for t in times), solution)
print()
list1 = [12,33,45,66,75,33,4,56,66,67,1,2]
# Using list comprehension
evenIndexList = [i for indexValue, i in enumerate(list1) if indexValue % 2 == 0]
print(evenIndexList)
# Standard approach
newList = []
for i in range(len(list1)):
if i % 2 == 0:
newList.append(list1[i])
print(newList)
解决方案
这是从删除所有奇数索引元素到Python代码的直接翻译
基准测试以及针对包含一百万个元素的列表的向上投票的解决方案:
基准代码(Try it online!):
只要这样做,它就会起作用
输出:-
[12, 45, 75, 4, 66, 1]
问题:
您的代码不适用于给定的代码段,因为每次从
list1
中删除一个元素时,都会删除该元素的索引解决方案:
为了使用迭代方法解决这个问题,您需要将偶数元素附加到另一个列表中,或者如Pratyush Arora所述,任何元素都可以工作
如果您使用的是迭代方法,这可能会有所帮助:
代码:
相关问题 更多 >
编程相关推荐