Я знаю, что нарезка и индексация строк довольно проста, но я не могу заставить свой код работать здесь. Извините, я новичок и только учусь!
Я пытаюсь проверить, содержит ли каждый элемент в списке (называемый «строками») определенную строку. Строки извлекаются из другого списка (называемого «суффиксами»), и я хочу вернуть индекс, поэтому я могу заменить первый символ, пробел, на тире «-».
Однако метод 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
так далее....
Обновлено: Хотя моя проблема была решена другим способом, я хотел бы понять, почему мой код не возвращает индекс, как я хочу.
Было бы полезно, если бы вы разместили ожидаемый результат алгоритма для ваших образцов строк.
Ваш ввод и вывод не совпадают
Я отредактирую свой вопрос, чтобы прояснить проблему и включить некоторые ожидаемые результаты.
Индексация не нужна, можно просто попробовать замену. Если суффикс отсутствует, то он просто не будет заменен.
for suffix in suffixes:
lines = [line.replace(suffix, suffix.replace(" ", "-")) for line in lines]
У вас также могут быть проблемы с корпусом. В вашем списке суффиксов есть «этил», а в выводе — «этил».
в чем собственно проблема, я прочитал ваш вопрос 2 раза