Перейти к содержимому

Как удалить часть списка в python

  • автор:

Удаление элементов списка по условию

Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 35-ти и меньше 65-ти). Удаляемые значения сохранить в другом списке.

Решение задачи на языке программирования Python

Алгоритм решения задачи выглядит простым. Достаточно перебрать элементы списка и удалить те, которые удовлетворяют условию. Однако при удалении элемента на его место становится следующий, но поскольку мы переходим к следующей ячейке, то пропускаем проверку того, что стал на место удаленного. Таким образом, цикл for , в теле которого перебираются элементы, использовать нельзя, так как меняется количество элементов списка.

a = [96, 72, 44, 29, 97, 69, 25, 12] print("A =", a) b = [] for i in a: if 20  i  90: a.remove(i) b.append(i) print("A =", a) print("B =", b)
A = [96, 72, 44, 29, 97, 69, 25, 12] A = [96, 44, 97, 25, 12] B = [72, 29, 69]

В примере число 44 оказалось пропущенным, так как когда было удалено 72, то 44 стало на его место. На следующей итерации цикла проверялось содержимое третьей ячейки, в которой уже стояло число 29. То же самое касается числа 25, перед которым было удалено 69.

В Python удалять элементы списка можно не только с помощью метода remove , также инструкцией del , при которой указывается сам список и индекс удаляемого элемента.

Также будем использовать цикл while , измеряя на каждой его итерации длину списка, индекс же увеличивать только в том случае, если удаления элемента не произошло.

import random a = [] for i in range(10): n = round(random.random() * 100) a.append(n) print("A =", a) b = [] i = 0 while i  len(a): if 35  a[i]  65: b.append(a[i]) del a[i] else: i += 1 print("A =", a) print("B =", b)

Примеры выполнения программы:

A = [66, 57, 72, 65, 37, 67, 23, 16, 30, 72] A = [66, 72, 65, 67, 23, 16, 30, 72] B = [57, 37]
A = [1, 65, 85, 62, 2, 1, 52, 63, 36, 94] A = [1, 65, 85, 2, 1, 94] B = [62, 52, 63, 36]

Более оригинальным способом решения задачи является перебор элементов списка с конца. В этом случае индекс меняется от большего к меньшему. При этом если происходит удаление элемента и сокращение длины списка, это не оказывает никакого влияния на элементы (их индексы), стоящие до удаляемого значения.

from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] i = len(a) - 1 while i >= 0: if 35  a[i]  65: b.insert(0, a[i]) del a[i] i -= 1 print("A =", a) print("B =", b)

Здесь вместо метода append() используется insert() , чтобы элементы во втором списке шли в том же порядке, в котором они были в первом, а не задом наперед.

В случае перебора с конца также можно использовать цикл for , если знать о том, что с помощью функции range() можно создавать диапазоны от большего числа к меньшему.

from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] for i in range(len(a)-1, -1, -1): if 35  a[i]  65: b.insert(0, a[i]) del a[i] print("A =", a) print("B =", b)

Выражение range(len(a)-1, -1, -1) при длинне списка a в 10 элементов означает, что будет получен диапазон, первый элемент которого 9, последний 0 (значение -1 в диапазон не входит). Третий аргумент в функции range() является шагом, то есть здесь следующий элемент получается из предыдущего вычитаем единицы.

X Скрыть Наверх

Решение задач на Python

Удаление элементов списка по срезу с указанным шагом

В результате произойдет удаление элементов последовательности sequence от индекса i до индекса j с шагом k .

Больше об индексации среза с заданным шагом читайте в операции получения среза последовательности с заданным шагом и смотрите встроенную функцию slice()

Замечания по удалению среза последовательности с указанным шагом будут такие же, как при удалении среза последовательности без шага

Примеры удаления части списка операцией среза с шагом.

>>> x = [1, 4, 7, 10, 13, 16, 19] >>> del x[1:6:2] >>> x # [1, 7, 13, 19] >>> x = [1, 4, 7, 10, 13, 16, 19] # индекс j выходит за пределы последовательности >>> del x[:11:3] >>> x # [4, 7, 13, 16] # Cрез выходит за пределы последовательности >>> del x[11::3] >>> x # [4, 7, 13, 16] # Индексы и шаг опущены >>> del x[::] >>> x # [] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Изменение/замена элемента списка по индексу
  • Изменение части списка операцией среза
  • Изменение списка срезом c заданным шагом
  • Удаление части списка операцией среза
  • Удаление части списка по срезу с заданным шагом
  • Метод list.append(), добавляет значение в конец списка
  • Метод list.clear(), очищает список
  • Метод list.copy(), копия списка
  • Метод list.extend(), расширяет список другой последовательностью
  • Расширение списка его содержимым
  • Метод list.insert(), вставить элемент по индексу
  • Метод list.pop(), получение с удалением элемент списка
  • Метод list.remove(), удаление элемента списка по значению
  • Метод list.reverse(), разворачивает элементы списка
  • Удаление элемента списка по индексу
  • Удаление дубликатов из списка Python с сохранением очередности

Удаление части списка

Я хочу удалить участок списка,а точнее все элементы с начала списка, пока я не наткнусь на присутствие ‘ ‘ в обьекте списка, но у меня не выходит:

j=['123','321','hhh','awdawdawd

','s','ggg'] for i in range(len(j)-1): if '

' in j[i]: j.pop(i) break j.pop(i) print(j)

Отслеживать
задан 19 июл 2022 в 14:24
165 8 8 бронзовых знаков
Возможный дубликат вопроса: Удаление элементов в списке словарей
19 июл 2022 в 14:27

Нет, как я понял там есть конкретные элементы, которые не нужны, а мне нужно останавливать цикл, если есть в тексте

, например a,b,c,d,e

,g — мне нужно удалить все, кроме g
19 июл 2022 в 14:29
разумеется, там не абсолютно тот же пример, но почему, по-вашему, у вас не выходит?
19 июл 2022 в 14:31

У меня всегда разный список и

идет в перемешку с текстом.
19 июл 2022 в 14:33
Покажите, какой должен быть результат для вашего примера.
19 июл 2022 в 16:34

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Можно еще так сделать

for i in range(len(j)): if '

' in j[i]: j = j[i+1:] break

Т.е. при нахождении нужных символов в элементе, просто обрезаем начало исходного списка до элемента, следующего за текущим, и прерываем цикл, т.к. условие поиска выполнено. И не нужно использовать дополнительный список.

Удаление части элементов списка по срезу

В результате произойдет удаление элементов последовательности sequence от индекса i до индекса j . Операция удаления элементов среза последовательности эквивалентна выполнению sequence[i:j] = [] .

Больше об индексации среза читайте в операции получения среза последовательности и смотрите встроенную функцию slice()

Замечания по операции удаления среза последовательности:

Если индекс j указанного среза выходит за пределы индексации последовательности sequence — j > len(sequence) , то в результате операции произойдет удаление элементов от индекса i последовательности до ее конца.

Если оба индекса указанного среза i > len(sequence) и j > len(sequence) — выходят за пределы индексов последовательности, то в результате операции удаления, последовательность sequence не изменится.

Если индексы указанного среза i и j опущены, то в результате произойдет удаление всей последовательности.

Примеры удаления части элементов списка срезом.

>>> x = [1, 4, 7, 10, 13, 16, 19] >>> del x[1:4] >>> x # [1, 13, 16, 19] # индекс j выходит за пределы последовательности >>> x = [1, 4, 7, 10, 13, 16, 19] >>> del x[5:20] >>> x # [1, 4, 7, 10, 13] # Cрез выходит за пределы последовательности >>> del x[20:] >>> x # [1, 4, 7, 10, 13] # Индексы опущены >>> del x[:] >>> x # [] # Вложенные последовательности >>> x = [[1, 4, 7, 10], [13, 16, 19]] >>> del x[0][1:4] >>> x # [[1], [13, 16, 19]] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Изменение/замена элемента списка по индексу
  • Изменение части списка операцией среза
  • Изменение списка срезом c заданным шагом
  • Удаление части списка операцией среза
  • Удаление части списка по срезу с заданным шагом
  • Метод list.append(), добавляет значение в конец списка
  • Метод list.clear(), очищает список
  • Метод list.copy(), копия списка
  • Метод list.extend(), расширяет список другой последовательностью
  • Расширение списка его содержимым
  • Метод list.insert(), вставить элемент по индексу
  • Метод list.pop(), получение с удалением элемент списка
  • Метод list.remove(), удаление элемента списка по значению
  • Метод list.reverse(), разворачивает элементы списка
  • Удаление элемента списка по индексу
  • Удаление дубликатов из списка Python с сохранением очередности

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *