我知道字符串切片和索引是相当简单的,但是我似乎无法使我的代码在这里工作。抱歉,我是新手,正在学习!
我正在尝试检查列表中的每个项目(称为“行”)是否包含某个字符串。这些字符串是从另一个列表(称为“后缀”)中提取的,我想返回一个索引,因此我可以将第一个字符(空格)替换为破折号“-”。
但是,在大多数情况下,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: print(line,line.find(后缀))
然后我的预期输出将是:
Acephate Butachlor Cycloate Dimethoate (Sum) 38
Azamethiphos Chlorantraniliprole Deltamethrin Endosulfan (A+B+Sulf) 56
等...
编辑:尽管我的问题已经用另一种方式解决了,但我想理解为什么我的代码没有按我的意愿返回索引。
答案 0 :(得分:1)
不需要索引,您可以尝试替换。如果后缀不存在,那么它将不会被替换。
for suffix in suffixes:
lines = [line.replace(suffix, suffix.replace(" ", "-")) for line in lines]
您可能还会遇到此案的问题。后缀列表中有“乙基”,但输出中有“乙基”。