Python:查找字符以检索要替换为另一个字符的字符串索引

问题描述 投票:1回答:1

我知道字符串切片和索引是相当直接的,但我似乎无法使我的代码在这里工作。对不起,我是新手,只是在学习!

我试图检查列表中的每个项目(称为“行”)是否包含某个字符串。字符串是从另一个列表(称为“后缀”)中提取的,我想返回一个索引,所以我可以用短划线“ - ”替换第一个字符,一个空格。

但是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(' ','-')

一旦我使用“ - ”加入一些带有后缀的单词,然后我将“行”中的其余项目拆分为按空格分割的新项目。

我面临的问题:如果找到“后缀”中的任何字符串(注意,每个字符串开头都有空格)作为列表“行”中项目的子字符串,我想要索引被退回。这种情况目前尚未发生。相反,输出只显示了一个案例,其中找到了“后缀”中的第一个字符串并且循环正在完成。

如果我添加行:if index!= -1:print(line,line.find(suffix))

然后我的预期输出将是这样的:

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

等等....

编辑:虽然我的问题已经解决了另一种方式,我想了解为什么我的代码没有按我的意愿返回索引。

python string slice
1个回答
1
投票

不需要索引,您可以尝试替换。如果后缀不存在,那么它就不会被替换。

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

您可能也遇到了案件问题。你的后缀列表中有“Ethyl”,但输出中有“ethyl”。

© www.soinside.com 2019 - 2024. All rights reserved.