Удаление элементов списка по условию
Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 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
Удаление разрывов строк в Python
Если у вас возникла необходимость используя Python удалить разрывы строк из текста, то можно воспользоваться следующим методом текстовой переменной:
Метод replace заменяет в строке все вхождения подстроки old на подстроку new. Если методу replace задать еще один параметр count то заменены будут не все вхождения, а только первые count из них.
Существуют следующие типы разрывов строк:
Пример удаления разрывов строк в Python:
-
//Удаление всех трех типов разрывов строк
string = string.replace(«\r»,»»)
string = string.replace(«\n»,»»)
Как убрать символ новой строки (\n) при чтении строк из файла
стоит заметить, что .rstrip() также удаляет любой пробел в конце строки, а не только символы новой строки как .rstrip(‘\n’) (это может и быть желаемым поведением).
30 апр 2017 в 20:22
Если хочется поддерживать и Юникодные окончания строк, то можно str.splitlines() метод использовать:
>>> file.read().splitlines() ['12', '10', '9', '15', '10', '120']
Отслеживать
ответ дан 30 апр 2017 в 20:20
52.2k 11 11 золотых знаков 108 108 серебряных знаков 312 312 бронзовых знаков
file = "file.txt" open(file).read().split('\n')
Отслеживать
ответ дан 30 ноя 2016 в 19:13
vadim vaduxa vadim vaduxa
8,932 14 14 серебряных знаков 24 24 бронзовых знака
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как удалить символы из строки в Python
Пользователи при написании кода на Python часто сталкиваются с необходимостью корректно отредактировать строковые данные. Среди возможных изменений могут быть: удаление некоторых символов из последовательности или их замена на другие, изменение регистра символов, объединение подстрок в одну последовательность и другие. Из этого списка возможных преобразований строковых данных мы остановимся на самом первом.
В настоящей инструкции мы расскажем, как удалять символы из строки в Python и какие методы для этого можно использовать.
Важно сразу отметить, что объекты строк в Python — неизменяемы. Это означает, что все методы и функции, взаимодействующие со строками, будут возвращать новый объект с измененной последовательностью символов.
Методы удаления символов из строки
В данном разделе инструкции будет рассказано об основных методах, которые существуют в Python и используются в том числе для удаления символов из последовательности. Среди них будут рассмотрены методы replace() , translate() и re.sub() . Ниже мы опишем их синтаксис, а также приведем примеры их использования в конкретных ситуациях.
replace()
Первый метод, который будет рассмотрен в данном разделе, — это replace() . Он предназначен для замены конкретных символов в строке на другие. В результате, replace() возвращает новый объект строки со всеми внесенными изменениями. Его синтаксис выглядит следующим образом:
исходная_строка.replace(old, new[, count])
- исходная_строка – последовательность, в которой будут происходить корректировки;
- old – здесь указываем то, что будет заменено;
- new – а здесь указываем то, на что будет производиться замена;
- count – это необязательный параметр, который указывает на количество необходимых замен.
Ниже приведем пример, в котором удалим все вхождения символа в строку в Python , а именно пробела в последовательности «T i m e w e b»:
example_str = "T i m e w e b"
result_str = example_str.replace(" ", "")
print(result_str)
В результате работы кода получим новый объект строки, который продемонстрирован на картинке ниже.
Чтобы удалить символ переноса строки в Python , возможно также использовать рассматриваемый метод replace() . Для этого в качестве первого аргумента необходимо указать специальный знак переноса строки, как это показано в примере ниже:
example_str = "\nTimeweb\nCloud"
print(f'Original string: ')
result_str = example_str.replace("\n", " ")
print(f'String after adjustments: ')
После выполнения программы мы получим результат, который продемонстрирован на картинке ниже.
Как мы уже говорили ранее, у метода replace() существует третий необязательный аргумент, который отвечает за количество необходимых замен. Продемонстрируем его работу на примере ниже:
example_str = "Timeweb Cloud Timeweb Cloud Timeweb Cloud"
print(f'Original string: ')
result_str = example_str.replace("Timeweb Cloud", "", 2)
print(f'String after adjustments: ')
Как видно по картинке выше, метод сработал именно столько раз, сколько указано в параметре. Все остальные вхождения подстроки «Timeweb Cloud» были проигнорированы.
В данной главе мы изучили работу метода replace() и показали лишь малую часть тех ситуаций, в которых следует его использовать. Теперь перейдем к другому методу, который также поможет пользователям удалять и изменять символы в строке, — translate() .
translate()
Предназначение translate() точно такое же, как и у прошлого метода. Однако у него есть свои функциональные особенности. В первую очередь, он в качестве аргумента принимает словарь или таблицу сопоставлений. После выполнения замены или удаления он возвращает новый объект типа String .
Синтаксис метода выглядит следующим образом:
исходная_строка.translate(таблица)
Ниже в примере покажем, как удалить определенные символы из строки в Python , используя метод translate() :
example_str = "Timeweb$Cloud$—$IT-решения$в$облаке."
print(f'Original string: ')
result_str = example_str.translate()
print(f'String after adjustments: ')
По завершении работы программы мы получили результат, представленный на картинке ниже.
Также, возможно указать таблицу сопоставлений до вызова метода для более читаемого кода, например, если в программе большое количество заменяемых символов. Ниже в примере удалим все вхождения специальных знаков «$», «\n» и «%» в строку:
example_str = "\nTimeweb%Cloud$—$IT-решения$в$облаке.\n"
print(f'Original string: ')
example_table =
result_str = example_str.translate(example_table)
print(f'String after adjustments: ')
Результат работы программы продемонстрирован на картинке ниже.
re.sub()
Кроме представленных выше методов, возможно использовать регулярные выражения для удаления и замены символов в строке. Для начала, в своем коде мы должны инициализировать соответствующий модуль re , а затем использовать его метод sub() . Он, как и предыдущие методы, ищет необходимые символы в последовательности по указанному шаблону и заменяет их. Данный процесс выполняется строго слева направо.
Синтаксис re.sub() представлен ниже:
re.sub(шаблон, замена, исходная_строка [, count=0, flags=0])
Данный метод содержит 5 параметров, 2 из которых являются необязательными:
- шаблон – это и есть регулярное выражение, по которому будет выполняться поиск в последовательности;
- замена – это символы или их последовательность, на которые будет выполняться замена;
- исходная_строка – последовательность, в которой будет выполняться весь процесс;
- count и flags – два необязательных параметра, которые отвечают за количество замен в указанной последовательности символов и использование флагов соответственно.
Например, чтобы удалить повторяющиеся символы в строке в Python , воспользуемся регулярными выражениями и методом sub() модуля re :
import re
example_str = "T i m e w e b"
print(f'Original string: ')
result_str = re.sub('\s', '', example_str)
print(f'String after adjustments: ')
В данном примере мы удалили все пробелы из строки. Результат работы кода продемонстрирован на картинке ниже.
Использование срезов для удаления символов
Помимо использования разнообразных методов для удаления символов, в Python также возможно использовать срезы. Как мы знаем, срезы — это извлеченная последовательность символов из строки.
Чтобы удалить символы из строки по индексу в Python , воспользуемся следующим срезом:
example_str = "\nTimeweb \nCloud"
print(f'Original string: ')
result_str = example_str[1:9] + example_str[10:]
print(f'String after adjustments: ')
В данном примере мы использовали срезы, чтобы избавиться от знаков переноса строки. Результат работы кода показан на картинке ниже.
Помимо двух параметров среза возможно использовать и третий. Он указывает на шаг прироста индексов. Так, например, если шаг будет равен 2, то каждый нечетный элемент строки будет удален. Не забывайте учитывать, что индексы начинаются с 0.
example_str = "Timeweb Cloud"
print(f'Original string: ')
result_str = example_str[::2]
print(f'String after adjustments: ')
Результат работы программы продемонстрирован на картинке ниже.
Заключение
В настоящей инструкции мы научились удалять символы из строки в Python , используя разные методы языка, а также регулярные выражения и срезы. Выбор способа, который вы будете использовать для удаления, остается за вами. Он будет напрямую зависеть от условий задачи. Так, например, метод replace() подойдет для более простых ситуаций, а re.sub() для сложных.
