Найти - Пользователи
Полная версия: Как удалить єлементі со списка в цикле...
Начало » Центр помощи » Как удалить єлементі со списка в цикле...
1
likin
Доброго дня.
Очень интересная задача.
К примеру со списка надо удалить числа кратніе 3, 7, 8.
На Яве рализовывал с помощью итераторов…

Спасибо.
Vader
>>> def is378(num):
... if num%3 == 0 or num%7 == 0 or num%8 == 0:
... return False
... return True
...
>>> l = [3,4,5,6,7,2,4,56,8,8,8,9,3,2,1,7]
>>> filter(is378,l)
[4, 5, 2, 4, 2, 1]
pill
например так
>>> test_list = [1,2,3,70,80,22,23,21]
>>> reduced_list = [i for i in test_list if i%3 and i%7 and i%8]
>>> reduced_list
[1, 2, 22, 23]
likin
Получется что мы везде генерируем новый список.
А если список объектов, который занимает достаточно много места в памяти.
Можно реализовать,что-то похожее?
or(Iterator iter = tmpLinkedList.iterator(); iter.hasNext() {
if (test(iter.next)) { iter.remove(); }
}

Спасибо, Ваши варианты мне подходят.
Vader
likin
А если список объектов, который занимает достаточно много места в памяти.
>>> from itertools import ifilter
>>> def is378(num):
... if num%3 == 0 or num%7 == 0 or num%8 == 0:
... return False
... return True
...
>>> l = [3,4,5,6,7,2,4,56,8,8,8,9,3,2,1,7]
>>> ifilter(is378,l)
<itertools.ifilter object at 0x02162D50>
>>> for i in ifilter(is378,l):
... print i
...
4
5
2
4
2
1
ifilter, в отличии от filter, создаст итератор, а не новый список.
Vader
Кстати, генератор можно получить и без itertools:
>>> def generator():
... for i in l:
... if not (i%3==0 or i%7==0 or i%8==0):
... yield i
...
>>> mygen = generator()
>>> for i in mygen: print i
...
4
5
2
4
2
1
Ах да, чуть не забыл :)
>>> l = [3,4,5,6,7,2,4,56,8,8,8,9,3,2,1,7]
>>> mygen = (i for i in l if i%3 and i%7 and i%8)
>>> mygen
<generator object <genexpr> at 0x02168E90>
>>> for i in mygen:
... print i
...
4
5
2
4
2
1
Ed
А почему никто не предлагает удаление inplace, с помощью delete?
agalen
Можно сделать и inplace, только удалять элементы из большого массива совсем неэффективно.

i = 0
while i < len( l ):
if l[i]%3==0 or l[i]%7==0 or l[i]%8==0:
del l[i]
else:
i += 1
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB