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

标签 python string slice

我知道字符串切片和索引相当简单,但我似乎无法让我的代码在这里工作。抱歉,我是新手,刚刚学习!

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

然而,在大多数情况下,str.find 方法返回 -1,这意味着未找到该字符串,但有一种情况除外:当在“lines”中的项目中找到“suffixes”中的第一个字符串时,它会返回 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(' ','-')

一旦我使用“-”将一些单词及其后缀连接起来,那么我会将“行”中的其余项目拆分为由空格拆分的新项目。

我面临的问题:如果我发现“后缀”中的任何字符串(注意,每个字符串开头都有空格)作为中项目的子字符串列表“lines”,我希望返回索引。目前还没有发生这种情况。相反,输出仅显示找到“后缀”中的第一个字符串并且循环正在完成的情况。

如果我添加以下行: 如果索引!= -1: print(line,line.find(suffix))

那么我的预期输出将是这样的:

 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]

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

关于Python:查找一个字符以检索字符串的索引以替换为另一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55576367/

相关文章:

python - 列表中连续零的数量

python - Flask、SQLAlchemy 和多线程 : MySQL too many connections

c# - ASP.NET C#中日期和字符串的转换

javascript - 如何检查 JavaScript 中变量中是否存在区分大小写和特殊字符的特定字符串?

python - 在 python 中反转列表切片

python - numpy 数组切片的意外结果(查看与复制)

python - 如何将 Pandas 列切片转置并插入到行切片中?

python - 条件概率计算

python - 如何过滤掉python中的单词?

python - Django表单中标签值之前的下划线是什么意思