правда, что в питоне быстрее созать новый лист по условию чем удалить элементы по условию из текущего?
типа так быстрее
l = [ i for i in l if str(i) != '1']
чем
toRemove = []
n = 0
for i in l:
if i == '1':
toRemove.append(n)
pass
pass
for j in toRemove:
del l[j]
pass
Здравствуйте, Denys V., Вы писали:
DV>правда, что в питоне быстрее созать новый лист по условию чем удалить элементы по условию из текущего?
Правда. Кстати твой пример содержит ошибку. Я провел собственные эксперименты. Надо сказать, в питоне довольно трудно удалить элемент по кастомному условию. Связано это с тем, что в питоне нельзя удалить элемент по итератору. Более-менее адекватный способ в сырце ниже...
from time import time
from random import randint
from copy import copy
ll = [randint(0,2) for j in xrange(0,100000)]
l = copy(ll)
t = time()
l = [i for i in l if i != 1]
print time()-t, len(l)
l1 = l
l = copy(ll)
t = time()
n = len(l)
while n:
n -= 1
if not l[n] != 1:
del l[n]
print time()-t, len(l)
l2 = l
for a,b in zip(l1, l2):
if a != b:
print 'not equal'
break
Результат:
0.0249998569489 66747
1.17900013924 66747