Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:查找一个字符以检索字符串索引,并用另一个字符替换_Python_String_Slice - Fatal编程技术网

Python:查找一个字符以检索字符串索引,并用另一个字符替换

Python:查找一个字符以检索字符串索引,并用另一个字符替换,python,string,slice,Python,String,Slice,我知道字符串切片和索引相当简单,但我似乎无法让我的代码在这里工作。对不起,我是个新手,只是在学习 我试图检查列表中的每个项目(称为“行”)是否包含某个字符串。这些字符串是从另一个列表(称为“后缀”)中提取出来的,我想返回一个索引,这样我就可以用破折号“-”替换第一个字符,一个空格 但是,str.find方法在大多数情况下返回-1,这意味着找不到字符串,只有一种情况除外,即当在“行”中的项目中找到“后缀”中的第一个字符串时,它返回43 示例输出: Acephate Butachlor Cycloa

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

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

但是,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]

你可能也有问题的情况。您的后缀列表中有“Ethyl”,但输出中有“Ethyl”。

实际问题是什么,我阅读了您的问题2次如果您发布了示例行算法的预期结果,这将非常有用。您的输入和输出不匹配我将编辑我的问题以澄清问题,并包括一些预期结果。