替换for循环中的字符串元素Python

问题描述:

我正在从文本文件中读取数据,因此每行都是一个字符串列表,并且所有这些列表都在数据列表中。所以我的列表如下所示:替换for循环中的字符串元素Python

data = [row1, row2, etc.] 
row1 = [str1, str2, etc.] 

我试图删除出现在行列表中的字符串中的任何$或%符号。我已签,如果我尝试做这一个单独的元素,说第二行的第四个元素具有“%”,所以:

data[1][3] = data[1][3].replace("%","") 

这将正确删除它,但是当我尝试和使用嵌套for循环做这一切:

for row in data: 
    for x in row: 
     x = x.replace("%","") 
     x = x.replace("$","") 

这不会删除任何%或$的迹象,我曾尝试只是在做它没有第二更换,看它是否会至少删除%征兆,但即使这样也行不通。

任何想法,为什么这不起作用,或者我怎么能做到这一点?
在此先感谢您的帮助!

+1

请不要用'str'的​​名字在Python中的一个变量。这也是一个功能! – dawg

+4

'for-in'不影响实际列表,因为元素被存储/复制到一个变量中,它不是一个直接引用。使用枚举和访问列表。 – Li357

+0

我会更新,我没有在我的代码中真正拥有它,我只是为了清晰起见而这样写的。 –

问题是,你的str变量是影响内置Python str变量。该修复很容易。只需使用另一个变量名称。

第二个问题是被替换的字符串在行列表本身中没有被替换。修复方法是将替换的字符串保存回列表中。对于这一点,你可以使用enumerate()给你俩的价值和它的行中的位置:

for row in data: 
    for i, x in enumerate(row): 
     x = x.replace("%","") 
     x = x.replace("$","") 
     row[i] = x 
+0

这是* only *问题吗? – Li357

+1

使用名称'str'是一种代码气味,但它不会阻止它的工作。 – jez

+0

我刚刚更新了它,我实际上并没有将它作为str代码,我正在这里写下来试图清楚说明我正在循环的内容。 –

您分配一个新值名称x但这并不改变rowdata内容。在更改x后,您需要为适当的列索引j(和行索引i)分配row[j] = xdata[i][j] = x。另见你python 3: lists dont change their values

此外,在这种情况下,你可以使用列表理解

data = [[item.replace("%", "").replace("$", "0") for item in row] for row in data] 
+0

什么是_list expressions_?你的意思是[_list comprehension_](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)? –

+0

当然,这是我的错误。谢谢。 –