Как удалить n из списка python
Перейти к содержимому

Как удалить n из списка python

Удаление разрывов строк в Python

Если у вас возникла необходимость используя Python удалить разрывы строк из текста, то можно воспользоваться следующим методом текстовой переменной:

Метод replace заменяет в строке все вхождения подстроки old на подстроку new. Если методу replace задать еще один параметр count то заменены будут не все вхождения, а только первые count из них.

Существуют следующие типы разрывов строк:

Пример удаления разрывов строк в Python:

    //Удаление всех трех типов разрывов строк
    string = string.replace(«\r»,»»)
    string = string.replace(«\n»,»»)

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

Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 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

Удаление «\n» в списке через цикл или при открытии файла

Через функцию открываю файлик, для получения значений построчно в список. И на выходе получаю такое:

Кликните здесь для просмотра всего текста

['Александр\n', 'Дмитрий\n', 'Максим\n', 'Сергей\n', 'Андрей\n', 'Алексей\n', 'Артём\n', 'Илья\n', 'Кирилл\n', 'Михаил\n', 'Никита\n', 'Матвей\n', 'Роман\n', 'Егор\n', 'Арсений\n', 'Иван\n', 'Денис\n', 'Евгений\n', 'Даниил\n', 'Тимофей\n']

Все бы ничего, но очень этот символ новой строки ‘\n’ ни к селу ни к городу.

В Интернете нашел вот такое:

str.rstrip('\n')

С одним элементом для теста работает, как данный метод красиво оформить в цикл, подскажите?

Пытался написать такой цикл, так там если «text2» сменить на «text» уходит в бесконечный цикл.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
text = ['Александр\n', 'Дмитрий\n', 'Максим\n'] # text = 'Александр\n' print(text) # print(text.rstrip("\n")) # text = text.rstrip("\n") text2 = [] for x in text: print(x) y = x.rstrip('\n') text2.append(y) print("\t" + " " + str(text)) print("\n" + str(text2))

Можно ли как то обойтись без таких костылей?
И модернизировать мою функцию?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import random import os import sys os.chdir(r"D:\python_lab\random_FIO") surname = [] name = [] middle_name = [] def openfile(name_file, name_list): f = open(name_file, 'r', encoding='utf-8') line = f.readline() while line: name_list.append(line) # name_list.rstrip('\n') # print(name) # break line = f.readline() f.close #name_list = [line.rstrip('\n') for line in name_list] openfile('name.txt', name) print(name)

Палками не бить
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как при открытии word, или PowerPoint или jpeg файла открыть созданную мною программу на c#?
Появилась необходимость открывать программу при открытии другого файла, как это сделать?

При открытии файла или папки он удаляется !
При нажатии на любой файл (папка, файл, даже "мой компютер" в проводнике), система начинает удалять.

Зависает 1С при открытии или прочтении файла эксель!
Здравствуйте. Пытался прочитать однотипные файлы, но на некоторых файлах 1с зависает, также и при.

Падение приложений при открытии или сохранении файла
День добрый! Опишу проблему: Проблема наблюдается в любом из приложений (Word, Firefox, . ).

Конфиликт имен при открытии файла через код
Знаю что проблема старая, но нигде не нашел нормального решения. Гуглится по: excel Range Name.

Эксперт Python

7283 / 4105 / 1795
Регистрация: 27.03.2020
Сообщений: 6,929

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
surname = [] name = [] middle_name = [] def openfile(name_file, name_list): f = open(name_file, 'r', encoding='utf-8') line = f.read().split() #for i in line : name_list.extend(line) # name_list.rstrip('\n') # print(name) # break #line = f.readline() f.close #name_list = [line.rstrip('\n') for line in name_list] openfile('name.txt', name) print(name)

Python: удалить переносы строк и лишние пробелы из строки?

Всем привет. Подскажите плз, как решить задачу с минимальным изобретанием велосипедов. Нужно очистить строку от символов переноса (заменить на пробелы) и убрать лишние пробелы и пустые строки.

Сейчас это делается вот так:

‘ ‘.join(filter(None, map(unicode.strip, input_string.splitlines())))

Может есть более стандартный способ?

Попытки привлечь либу textwrap приводят только к раздутию кода… Может, я не умею ее готовить?

  • Вопрос задан более трёх лет назад
  • 95001 просмотр

Комментировать
Решения вопроса 1

Регуляркой:
import re
mystr = » balabla\n zzz »
re.sub(«^\s+|\n|\r|\s+$», », mystr)

В этом примере удаляем пробелы в начале и конце строки и символы переноса строки. Отредактируйте под свои нужды.

Ответ написан более трёх лет назад
Нравится 9 3 комментария
Fak3 @Fak3 Автор вопроса
Спасибо за наводку!
Задача решается так:
re.sub(«\s*\n\s*», ‘ ‘, s.strip())
re.sub(«\s+», » «, s)

все норм, только вот так:
import re
mystr = » balabla\n zzz »
mystr = re.sub(«^\s+|\n|\r|\s+$», », mystr)
PS Спасибо за способ, помогло

Ответы на вопрос 4

' '.join(s.split())

не подойдёт?
Ответ написан более трёх лет назад
Нравится 5 1 комментарий

Правда при этом не только переносы и пробелы будут обработаны, но вообще все пробельные символы (табы например). Но в обычных юзкейсах это именно то что нужно.

php программист
Регулярка \s+ отличный способ =)
Ответ написан более трёх лет назад
Нравится 1 3 комментария
Fak3 @Fak3 Автор вопроса
Что-то мне фантазии не хватает, как это регуляркой решить. Поподробней можно?
Рустам Сафин @snegovikufa

Подозреваю через re.match (вроде?) создаешь список кандидатов на замену, а затем применяешь your_string.replace(what_from, what_to)

Fak3 @Fak3 Автор вопроса
А как регуляркой найти список кандидатов на замену?

__author__ = 'dikkini@gmail.com' from itertools import groupby def lines_filter(iterable): """ input: any iterable output: generator or list """ wait_chr = False is_begin = True #======================================================================================================== # You can delete "groupby" and the result will not change, but will increase the length of the input list. #======================================================================================================== for item, i in groupby(iterable): if item: is_begin = False if wait_chr: wait_chr = False yield '' yield item elif not is_begin and not wait_chr: wait_chr = True if __name__ == '__main__': list1 =['','','','i','hgf', '','','','9876','','','7','','9','','',''] # Input list print [i for i in lines_filter(list1)] # Output to the list 

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
string.rstrip()
или
string = string.replace(«\n»,»»)
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python

Как превратить свою аватарку в Telegram в часы?

  • 1 подписчик
  • 6 часов назад
  • 40 просмотров

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

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