Я пытаюсь удалить некоторые слова из строкового списка слов.
list1= "abc dfc kmc jhh jkl".
Моя цель - убрать слова от 'dfc' до 'jhh'. Я новичок в Python, поэтому пробую кое-что с индексом из C#, но здесь они не работают.
Я пробую это:
index=0
for x in list1:
if x=='dfc'
currentindex=index
for y in list1[currentindex:]
if y!='jhh'
break;
del list1[currentindex]
currentindex=index
elif x=='jhh'
break;
Кажется, вы указали строку для list1. Если это строка, используйте пакет re. re.sub () выполняет свою работу.






Вы можете сделать это
test = list1.replace("dfc", "")
Не думайте, что вопрос заключается в этом. OP хочет заменить все слова между двумя словами, а не заменять экземпляры слова.
Сначала разделите строку на слова:
list1 = "abc dfc kmc jhh jkl"
words = list1.split(" ")
Затем перебирайте слова, пока не найдете совпадение:
start_match = "dfc"
start_index = 0
end_match = "jhh"
end_index = 0
for i in range(len(words)):
if words[i] == start_match:
start_index = i
if words[i] == end_match:
end_index = j
break
print ' '.join(words[:start_index]+words[end_index+1:])
Примечание. В случае нескольких совпадений будет удалено наименьшее количество слов (выберите последнее start_match и первое end_match).
Спасибо, все работает нормально, мне просто нужно внести это в новый список.
list1= "abc dfc kmc jhh jkl".split() составляет list1 следующим образом:
['abc', 'dfc', 'kmc', 'jhh', 'jkl']
Теперь, если вы хотите удалить элемент списка, вы можете попробовать либо
list1.remove(item) #removes first occurrence of 'item' in list1
Или же
list1.pop(index) #removes item at 'index' in list1
Не думайте, что вопрос заключается в этом. OP хочет заменить все слова между двумя словами, а не заменять экземпляры слова.
Вместо длинного цикла for решает задачу простой фрагмент в Python:
words = ['abc', 'dfc', 'kmc', 'jhh', 'jkl']
del words[1:4]
print(words)
индексы начинаются с 0. Итак, вы хотите удалить индекс 1-3. Мы вводим 4 в срез, потому что Python останавливает -1 перед последним аргументом индекса (то есть в индексе 3). Намного проще, чем петля.
Вот ваш результат:
['abc', 'jkl']
>>> a = "abc dfc kmc jhh jkl"
>>> print(a.split("dfc")[0] + a.split("jhh")[1])
abc jkl
Вы можете выполнить этот пример обработки с помощью лямбда:
b = lambda a,b,c : a.split(b)[0] + a.split(c)[1]
print(b(a, "dfc", "jhh"))
Создайте список слов, разделив строку
list1= "abc dfc kmc jhh jkl".split()
Затем выполните итерацию по списку, используя переменную флага, чтобы указать, следует ли удалить элемент из списка.
flag = False
for x in list1:
if x=='dfc':
flag = True
if x == 'jhh':
list1.remove(x)
flag = False
if flag == True:
list1.remove(x)
Есть несколько проблем с тем, что вы пробовали, в частности:
list1 - это строка, а не списокlist1[i], вы получаете символ с индексом i (ни слова)Вот мое предложение однострочного стиля с использованием re.sub(), которое просто заменяет часть строки, совпадающую с заданным шаблоном регулярного выражения. Для вашей цели может быть достаточно:
import re
list1= "abc dfc kmc jhh jkl"
list1 = re.sub(r'dfc .* jhh ', "", list1)
print(list1)
Примечание: я сохранил идентификатор list1, даже если это строка.
если list1 является строкой, как указано в вашем сообщении, ваш внешний цикл будет проходить через list1 символ за символом (x - это символ, поэтому никогда не будет соответствовать 3-символьной строке).