Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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_Python 3.x_List_For Loop_Str Replace - Fatal编程技术网

Python 循环遍历列表元素以替换每个元素中的字符串

Python 循环遍历列表元素以替换每个元素中的字符串,python,python-3.x,list,for-loop,str-replace,Python,Python 3.x,List,For Loop,Str Replace,我有一份大学名单: ['1 1 LOMONOSOV MOSCOW STATE UNIVERSITY XL FO VH 5 A 100 100 100 87.1 52.4 52 99.3 87 100 100', '', '', '', ''], ['2 2 NOVOSIBIRSK STATE UNIVERSITY M CO VH 98.1 96.5 88.9 98

我有一份大学名单:

['1 1  LOMONOSOV MOSCOW STATE UNIVERSITY  XL FO VH  5  A  100 100 100  87.1            52.4 52  99.3 87  100 100', '', '', '', ''],
['2 2 NOVOSIBIRSK STATE UNIVERSITY                                                 M CO VH 98.1 96.5 88.9 98.8 59.7 38.1 69.8 92.1 99.4 96.7', '', '', '', ''],
...
我想删除多余的信息(nrs、空格等),只保留大学名称

为此,我尝试循环浏览我的列表,将数字和其他不需要的字符替换为“”

到目前为止,我已经:

for i in range(len(flat_data2)):

    mainString = flat_data2[i]

    def replaceMultiple(mainString, unwanted, input_char):
    # Iterate over the strings to be replaced
        for elem in unwanted :
        # Check if string is in the main string
            if elem in mainString :
            # Replace the string
                mainString = mainString.replace(elem, input_char)

        return  mainString
replaceMultiple(mainString, unwanted, input_char)
不幸的是,我只返回了列表的最后一个元素(尽管不需要的字符被删除了…)

我错过了什么?或者你有更好的解决方案吗? 非常感谢

您可以尝试:

input_char = ""
conv = ''.maketrans({c: input_char for c in unwanted})

l = list()   # if you want a list of all your strings
for i in range(len(flat_data2)):
    mainString = flat_data2[i].translate(conv)
    l.append(mainString)

您的问题来自这样一个事实,即您在每次循环迭代中都要定义函数,但您没有运行它或保存它的输出。使其工作的最小更改是:

def replaceMultiple(s, unwanted, input_char):
    # Iterate over the strings to be replaced
    for elem in unwanted:
        # Replace the string, does not do anything if `elem` not in `s`
        s = s.replace(elem, input_char)
    return s

flat_data2_new = [replaceMultiple(x) for x in flat_data2]

您正在迭代这些字符串,然后只返回mainString。当您替换字符串时,您可以将其分配给一个新列表,以保留已解析的数据。然后返回整个列表。您可能需要执行
flat\u data2[i]=replaceMultiple(主字符串、不需要的、输入字符)
。此外,还不清楚是否在循环中调用了replaceMulitple,因此您的问题可能来自缺少缩进…谢谢!有道理。我在顶部添加了一个
flat\u data2\u new=[]
并将其更改为
flat\u data2\u new.append(mainString)
和'return flat\u data2\u new',但现在我返回了一个具有相同最终元素的列表,每次都少了一个不需要的字符。。。知道少了什么吗?@Adonis谢谢!当我缩进replacemploy并相应地调整下面的代码时,我得到了
意外的缩进
:(更好:
l=[x.translate(conv)for x in flat_data2]
。谢谢!为此,我得到了
值错误:翻译表中的字符串键的长度必须为1
。在定义
intab=“1234567890.”outtab=“”
时,我确实设法使用
maketrans
进行了替换。但是,我得到的所有空格的长度必须与输入和输出的长度相同。知道如何解决此问题吗“长度必须为1”-问题?嘿,非常感谢!在将其更改为
flat\u data2\u new=[replacepmultiple(x,不需要的,input\u char)for x in flat\u data2]
之后,它成功了!