Python: найти символ, чтобы получить индекс строки для замены другим символом

Я знаю, что нарезка и индексация строк довольно проста, но я не могу заставить свой код работать здесь. Извините, я новичок и только учусь!

Я пытаюсь проверить, содержит ли каждый элемент в списке (называемый «строками») определенную строку. Строки извлекаются из другого списка (называемого «суффиксами»), и я хочу вернуть индекс, поэтому я могу заменить первый символ, пробел, на тире «-».

Однако метод str.find в большинстве случаев возвращает -1, что означает, что строка не найдена, за исключением одного случая, когда он возвращает 43, когда первая строка в «суффиксах» найдена в элементе в «строках».

Пример вывода:

Acephate Butachlor Cycloate Dimethoate (Sum) -1
Aldicarb Captan (Sum) Cyprodinil Disulfoton -1
Aldicarb (Sum) Carbaryl Cyromazine Disulfoton (Sum) -1
Amitraz Carboxine DDT (Sum) Dodemorph -1
Azamethiphos Chlorantraniliprole Deltamethrin Endosulfan (A+B+Sulf) -1
Azinphos-ethyl Chlordane Demeton Endosulfan Alfa 43
Azinphos-methyl Chlordane Trans Demeton-S-methyl-sulfone Endosulfan Beta -1

Я подозреваю, что это ТОЛЬКО поиск первого, но я следовал синтаксису, который нашел в нескольких местах, поэтому не понимаю, почему.

lines = ['', 'Abamectin Buprofezin Cyazofamid Dimethoate', '', 'Acephate Butachlor Cycloate Dimethoate (Sum)', '', 'Acequinocyl Butocarboxim Cycloxydim Dimethomorph', '', 'Acetamiprid Butralin Cyflufenamid Diniconazole', '', 'Acetochlor Cadusafos Cyfluthrin Dinocap', '', 'Acrinathrin Captafol Cymoxanil Dinotefuran', '', 'Alachlor Captan Cyproconazole Diphenylamine', '']

"""if there are any suffixes, then join to the preceeding word with a dash, so then can split data by spaces"""
suffixes=[" Alfa"," Beta"," Sulfate"," sulfoxide"," (DCPA)"," (Sum)"," (Folpet)"," sulphone"," butoxide"," Methyl"," (A+D)"," (THPI)"," (A+B+Sulf)"]

for line in lines:
    if any(suffix in line for suffix in suffixes):
        print(line, line.find(suffix)) 
        ind=line.find(suffix)
        line[ind].replace(' ','-')

Как только я соединил некоторые слова с их суффиксами, используя «-», я разделю остальные элементы на «строки» на новые элементы, разделенные пробелом.

Проблема, с которой я столкнулся: Если какая-либо из строк в "суффиксах" найдена (обратите внимание, каждая из них имеет пробел в начале строки) в качестве подстроки для элементов в списке "строки", я хочу, чтобы индекс был возвращен. В настоящее время этого не происходит. Вместо этого вывод просто показывает один случай, когда первая строка в «суффиксах» найдена и цикл заканчивается.

Если я добавлю строку: если индекс != -1: печать (строка, строка. найти (суффикс))

Тогда мой ожидаемый результат будет примерно таким:

 Acephate Butachlor Cycloate Dimethoate (Sum) 38
 Azamethiphos Chlorantraniliprole Deltamethrin Endosulfan (A+B+Sulf) 56

так далее....

Обновлено: Хотя моя проблема была решена другим способом, я хотел бы понять, почему мой код не возвращает индекс, как я хочу.

в чем собственно проблема, я прочитал ваш вопрос 2 раза

Kunal Mukherjee 08.04.2019 17:03

Было бы полезно, если бы вы разместили ожидаемый результат алгоритма для ваших образцов строк.

Lee Jenkins 08.04.2019 17:04

Ваш ввод и вывод не совпадают

Kunal Mukherjee 08.04.2019 17:10

Я отредактирую свой вопрос, чтобы прояснить проблему и включить некоторые ожидаемые результаты.

Westworld 08.04.2019 17:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Индексация не нужна, можно просто попробовать замену. Если суффикс отсутствует, то он просто не будет заменен.

for suffix in suffixes:
    lines = [line.replace(suffix, suffix.replace(" ", "-")) for line in lines]

У вас также могут быть проблемы с корпусом. В вашем списке суффиксов есть «этил», а в выводе — «этил».

Другие вопросы по теме