удаление элементов из списка python
есть примерно такой список
my_list=[
[1, 'in'], [2, 'out'],
[3, 'in'],[4, 'in'], [4, 'in'],
[5, 'out'],[6, 'out']
]
Элементов обычно больше. В нем встречаются иногда подряд идущие элементы со значением in или out. Как сделать можно если подряд идет больше одного такого повторения оставить только 1 элемент. А второй удалить?
Разобрался как удалить все с in
el = 0
while el < len(my_list):
if (my_list[el][1] =='in' and my_list[el+1][1] =='in'):
del my_list[el+1]
else:
el += 1
print(my_list)
как удалить теперь и все out?
Ответы (2 шт):
Автор решения: Ivan Didyk
→ Ссылка
Просто "копируете" часть имеющегося у вас кода:
my_list = [
[1, 'in'], [2, 'out'],
[3, 'in'],[4, 'in'], [4, 'in'],
[5, 'out'],[6, 'out']
]
el = 0
while el < len(my_list) - 1: # Чтобы el+1 не выходил за границы массива
if (my_list[el][1] =='in' and my_list[el+1][1] =='in'):
del my_list[el+1]
elif (my_list[el][1] =='out' and my_list[el+1][1] =='out'): # Копия
del my_list[el+1]
else:
el += 1
print(my_list)
Автор решения: dIm0n
→ Ссылка
Для списков ненулевой длины:
import itertools
def pairwise(iterable):
a, b = itertools.tee(iterable)
next(b, None)
return zip(a, b)
my_list=[
[1, 'in'], [2, 'out'],
[3, 'in'],[4, 'in'], [4, 'in'],
[5, 'out'],[6, 'out']
]
print([my_list[0]] + [y for x, y in pairwise(my_list) if y[1] != x[1]])