Форум — Development python регулярное выражение python 0 1 найти слово в списке и если оно есть удалить элемент спискакак сделать так? Ссылка
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 ★★ (13.12.17 07:42:18 MSK) Показать ответы Ссылка
Ответ на: комментарий от playX 13.12.17 07:42:18 MSK Еще надо добавить после последней строчки file.write(line) playX ★★ (13.12.17 07:51:41 MSK) Ссылка
Ответ на: комментарий от playX 13.12.17 07:42:18 MSK Удаляет слово только ведьу меня списокa = ['ноутбук lenovo', 'ноутбук dell','ноутбук lenovo']если в списке есть lenovo, то удалить полностью элемент списка Должно остатьсяa = ['ноутбук dell'] logonsessons (13.12.17 07:54:19 MSK) автор топика Показать ответы Ссылка
Ответ на: комментарий от logonsessons 13.12.17 07:54:19 MSK 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 ★★ (13.12.17 08:07:10 MSK) Показать ответ Ссылка
Ответ на: комментарий от logonsessons 13.12.17 07:54:19 MSK def is_lenovo(laptop): return "lenovo" in laptop a = ['ноутбук lenovo', 'ноутбук dell','ноутбук lenovo'] a = filter(is_lenovo, a) deadNightTiger ★★★★★ (13.12.17 08:09:18 MSK) Показать ответы Ссылка
Ответ на: комментарий от logonsessons 13.12.17 07:54:19 MSK a.remove(line)? где line элемент с найденным совпадением. grem ★★★★★ (13.12.17 08:10:01 MSK) Показать ответ Ссылка
Ответ на: комментарий от deadNightTiger 13.12.17 08:09:18 MSK не работает, возвращает обьект logonsessons (13.12.17 08:24:37 MSK) автор топика Показать ответ Ссылка
Ответ на: комментарий от playX 13.12.17 08:07:10 MSK дружище, файл не нужен) у меня список logonsessons (13.12.17 08:25:24 MSK) автор топика Ссылка
Ответ на: комментарий от grem 13.12.17 08:10:01 MSK я прогонял в цикле, удаляет только один раз logonsessons (13.12.17 08:26:55 MSK) автор топика Показать ответ Ссылка
Ответ на: комментарий от logonsessons 13.12.17 08:26:55 MSK Должно удалять первое встретившееся. То есть на следующем шаге должно опять удалить первое попавшееся. Но скорее всего проще каким-нибудь фильтром пройтись. Тут уже нужно чуть дольше гуглить. grem ★★★★★ (13.12.17 08:53:13 MSK) Ссылка
Ответ на: комментарий от logonsessons 13.12.17 07:54:19 MSK Если можно не удалять, а сделать новый список: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_ ★★ (13.12.17 09:04:04 MSK) Показать ответы Ссылка
Ответ на: комментарий от aedeph_ 13.12.17 09:04:04 MSK list index a of range) ошибка, logonsessons (13.12.17 09:08:18 MSK) автор топика Показать ответ Ссылка
Ответ на: комментарий от aedeph_ 13.12.17 09:04:04 MSK первый способ сработал) спасибо) только я ничего не понял, что это за штука? logonsessons (13.12.17 09:09:43 MSK) автор топика Показать ответы Ссылка
Ответ на: комментарий от logonsessons 13.12.17 09:09:43 MSK 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 ★ (13.12.17 09:18:46 MSK) Показать ответ Ссылка
Ответ на: комментарий от creazero 13.12.17 09:18:46 MSK а почему именно append? logonsessons (13.12.17 09:21:21 MSK) автор топика Ссылка
Ответ на: комментарий от logonsessons 13.12.17 08:24:37 MSK ну сделай a = list(filter(...)) deadNightTiger ★★★★★ (13.12.17 09:25:45 MSK) Ссылка
Ответ на: комментарий от deadNightTiger 13.12.17 08:09:18 MSK Добавить лямбду и первый приз за лучший ответ. vvn_black ★★★★★ (13.12.17 09:26:05 MSK) Ссылка
Ответ на: комментарий от logonsessons 13.12.17 09:08:18 MSK Да, точно, надо так:for i in reversed(range(len(a))): if 'lenovo' in a[i]: a.pop(i) aedeph_ ★★ (13.12.17 09:35:34 MSK) Ссылка
Ответ на: комментарий от logonsessons 13.12.17 09:09:43 MSK https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions aedeph_ ★★ (13.12.17 09:36:53 MSK) Ссылка
Ответ на: комментарий от aedeph_ 13.12.17 09:04:04 MSK ладно, из десятка комментариев выберу твой, т.к. он наиболее близок к вменяемостипервое решение прекрасно, за вычетом того, что lenovo может оказаться частью другого слова, хотя в контексте задачи это и невероятновторое решение говно, т.к. квадратичная сложность вместо линейной. нормальный питонический путь ин-плейс - это, например, так:a[:] = [s for s in a if is_censored(s)] извЕняюсь за легкий царизм, нервы не выдержали MyTrooName ★★★★★ (13.12.17 14:40:52 MSK) Ссылка
Ответ на: комментарий от aedeph_ 13.12.17 09:04:04 MSK Эээ, не range. Даёшь в массы enumerate! Deleted (16.12.17 21:09:31 MSK) Ссылка