LINUX.ORG.RU

from __future__ import print_function
import io
 word = "word"
    with io.open(/home/user/file.txt) as file:
        for line in file:
            if word in line:
               line = line.replace(word, "")
playX ★★
()
Ответ на: комментарий от playX

Еще надо добавить после последней строчки

 file.write(line)

playX ★★
()
Ответ на: комментарий от playX

Удаляет слово только ведь

у меня список

a = ['ноутбук lenovo', 'ноутбук dell','ноутбук lenovo']

если в списке есть lenovo, то удалить полностью элемент списка Должно остаться

a = ['ноутбук dell']

logonsessons
() автор топика
Ответ на: комментарий от logonsessons
from __future__ import print_function
import io
 infile = "information.txt"
 outfile = "redacted.txt"
 word_delete = "lenovo"
 fin = open(infile)
 fout = open(outfile, w+)
   for word in word_delete:
          line = line.replace(word, "")
            fout.write(line)
playX ★★
()
Ответ на: комментарий от logonsessons

Должно удалять первое встретившееся. То есть на следующем шаге должно опять удалить первое попавшееся. Но скорее всего проще каким-нибудь фильтром пройтись. Тут уже нужно чуть дольше гуглить.

grem ★★★★★
()
Ответ на: комментарий от logonsessons

Если можно не удалять, а сделать новый список:

a = [s for s in a if not 'lenovo' in s]

Если имеено удалять, то

for i in range(len(a)):
    if 'lenovo' in a[i]:
        a.pop(i)
aedeph_ ★★
()
Ответ на: комментарий от logonsessons
a = [s for s in a if not 'lenovo' in s]

Идентично этому:

# тот же самый код
a = ['ноутбук lenovo', 'ноутбук dell','ноутбук lenovo']
b = []
for s in a:
    if 'lenovo' not in s:
        b.append(s)
a = b

creazero
()
Ответ на: комментарий от deadNightTiger

Добавить лямбду и первый приз за лучший ответ.

vvn_black ★★★★★
()
Ответ на: комментарий от logonsessons

Да, точно, надо так:

for i in reversed(range(len(a))):
    if 'lenovo' in a[i]:
        a.pop(i)
aedeph_ ★★
()

прочитал тему

@

удалил аккаунт

MyTrooName ★★★★★
()
Ответ на: комментарий от aedeph_

ладно, из десятка комментариев выберу твой, т.к. он наиболее близок к вменяемости

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

второе решение говно, т.к. квадратичная сложность вместо линейной. нормальный питонический путь ин-плейс - это, например, так:

a[:] = [s for s in a if is_censored(s)]

извЕняюсь за легкий царизм, нервы не выдержали

MyTrooName ★★★★★
()
Ответ на: комментарий от aedeph_

Эээ, не range. Даёшь в массы enumerate!

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.