Удаление элементов списка по условию
Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 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 19/20
Строка считывается со стандартного ввода функцией input() . Напомним, что для двух строк определа операция сложения (конкатенации), также определена операция умножения строки на число.
Строка состоит из последовательности символов. Узнать количество символов (длину строки) можно при помощи функции len :
>>> S = 'Hello' >>> print(len(S)) 5
Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.
Есть три формы срезов. Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i , при этом считая, что нумерация начинается с числа 0. То есть если , то , , , , .
Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.
Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 . То есть , , , , .
Или в виде таблицы:
| Строка S | H | e | l | l | o |
| Индекс | S[0] | S[1] | S[2] | S[3] | S[4] |
| Индекс | S[-5] | S[-4] | S[-3] | S[-2] | S[-1] |
Если же номер символа в срезе строки S больше либо равен len(S) , или меньше, чем -len(S) , то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range .
Срез с двумя параметрами: S[a:b] возвращает подстроку из b-a символов, начиная с символа c индексом a , то есть до символа с индексом b, не включая его. Например, S[1:4]==’ell’ , то же самое получится если написать S[-4:-1] . Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчиватеся индексом -1, не включая его).
При использовании такой формы среза ошибки IndexError никогда не возникает. Например, срез S[1:5] вернет строку ‘ello’ , таким же будет результат, если сделать второй индекс очень большим, например, S[1:100] (если в строке не более 100 символов).
Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Например, чтобы удалить из строки первый символ (его индекс равен 0, то есть взять срез, начиная с символа с индексом 1), то можно взять срез S[1:] , аналогично если опустиить первый параметр, то срез берется от начала строки. То есть удалить из строки последний символ можно при помощи среза S[:-1] . Срез S[:] совпадает с самой строкой S .
Если задать срез с тремя параметрами S[a:b:d] , то третий параметр задает шаг, как в случае с функцией range , то есть будут взяты символы с индексами a , a+d , a+2*d и т.д. При задании значения третьего параметра, равному 2, в срез попадет кажый второй символ, а если взять значение среза, равное -1 , то символы будут идти в обратном порядке.
Метод — это функция, применяемая к объекту, в данном случае — к строке. Метод вызывается в виде Имя_объекта.Имя_метода(параметры) . Например, S.find(«e») — это применение к строке S метода find с одним параметром «e» .
Метод find и rfind
Метод find находит в данной строке (к которой применяется метод) данную подстроку (которая передается в качестве параметра). Функция возвращает индекс первого вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение -1. Например:
>>> S = 'Hello' >>> print(S.find('e')) 1 >>> print(S.find('ll')) 2 >>> print(S.find('L')) -1
Аналогично, метод rfind возвращает индекс последнего вхождения данной строки (“поиск справа”).
>>> S = 'Hello' >>> print(S.find('l')) 2 >>> print(S.rfind('l')) 3
Если вызвать метод find с тремя параметрами S.find(T, a, b) , то поиск будет осуществляться в срезе S[a:b] . Если указать только два параметра S.find(T, a) , то поиск будет осуществляться в срезе S[a:] , то есть начиная с символа с индексом a и до конца строки. Метод S.find(T, a, b) возращает индекс в строке S , а не индекс относительно
Метод replace заменяет все вхождения одной строки на другую. Формат: S.replace(old, new) — заменить в строке S все вхождения подстроки old на подстроку new . Пример:
>>> 'Hello'.replace('l', 'L') 'HeLLo'
Если методу replace задать еще один параметр: S.replace(old, new, count) , то заменены будут не все вхождения, а только не больше, чем первые count из них.
>>> 'Abrakadabra'.replace('a', 'A', 2) 'AbrAkAdabra'
Подсчитывает количество вхождений одной строки в другую строку. Простейшая форма вызова S.count(T) возвращает число вхождений строки T внутри строки S . При этом подсчитываются только непересекающиеся вхождения, например:
>>> 'Abracadabra'.count('a') 4 >>> ('a' * 100000).count('aa') 50000
При указании трех параметров , будет выполнен подсчет числа вхождений строки T в срез S[a:b] .
Python-сообщество
![]()
- Начало
- » Python для новичков
- » Как удалить \n
#1 Фев. 7, 2023 09:13:21
Scorp_1978 Зарегистрирован: 2023-02-03 Сообщения: 25 Репутация: 0 Профиль Отправить e-mail
Как удалить \n
Добрый день подскажите как удалить перенос строки \n .rstrip() не помогает.
[code python]
group_name = input("Введите название чего-то")
url = f"https://api.vk.com/method/wall.get?domain=&count=20&access_token=&v=5.52"
req = requests.get(url)
src = req.json()
with open(f"/.json", "w", encoding="utf-8") as file:
json.dump(src, file, indent=4, ensure_ascii=False)
with open(f"/data.csv", "w", encoding="utf-8" ) as file:
writer = csv.writer(file,delimiter='&')
posts = src["response"]["items"]
for fresh_post_id in posts:
writer.writerow([fresh_post_id["text"].rstrip(),fresh_post_id["id"]]) #вот здесь не убирает перенос
print(fresh_post_id["text"].rstrip(),fresh_post_id["id"]) #и вот здесь тоже не убирает перенос
[/code]
#2 Фев. 7, 2023 09:57:50
py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9698 Репутация: 842 Профиль Отправить e-mail
Как удалить \n
Для чего тут модуль csv? Он и вставляет перевод строки, потому что это обязательно по формату CSV (comma-separated values). Там должно вставляться в любой системе \r\n. Это признак конца записи. И этот признак конца записи изначально сделан так, чтобы открываемый файл при открытии всегда открывался правильно в любой системе, в какой бы системе с какими бы концами строк, свойственных системе, его не открыли. На винде концы строк — \r\n, в лине концы строк — \n, в других системах концы строк \r.
CSV — это формат хранения данных, у которого есть свои правила, а не просто какие-то строчки.
https://en.wikipedia.org/wiki/Comma-separated_values
Если тебе нужно что-то писать в файл, используй print() и строковые методы.
Пример вывода в файл stdout
>>> import sys >>> >>> lst = ['a', 'b', 'c', 'd'] >>> >>> string = '&'.join(lst) >>> >>> print(string, end='', file=sys.stdout) a&b&c&d>>>
Отредактировано py.user.next (Фев. 7, 2023 10:03:00)
#3 Фев. 8, 2023 04:36:05
Scorp_1978 Зарегистрирован: 2023-02-03 Сообщения: 25 Репутация: 0 Профиль Отправить e-mail
Как удалить \n
я спарсил страницу с VK, там есть некоторые объявления с переносом строки, а мне надо чтоб одно объявление было равно одной строке в csv для дальнейшего поиска, в данный момент получается что одно объявление а строк несколько
В json есть “\n” который надо убрать
"text": "Продам. Недорого. \nПисать в личку. ",
posts = src["response"]["items"]
for fresh_post_id in posts:
writer.writerow(fresh_post_id["text"])
может я чегото не понимаю
Отредактировано Scorp_1978 (Фев. 8, 2023 06:13:29)
Как удалить первый элемент строки python
Для этой операции удобно использовать срезы. Срез позволяет получить любую часть строки, заключённую между указанными индексами. Например:
>>> string = "Hello, World!" >>> string[7:12] 'World' >>>
Удаление первого символа строки равнозначно получению среза со второго символа и до конца строки:
>>> string = "hello" >>> new_str = string[1:] 'ello' >>>
Второй индекс можно опустить, по умолчанию он равен длине строки.