替换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("$","")
这不会删除任何%或$的迹象,我曾尝试只是在做它没有第二更换,看它是否会至少删除%征兆,但即使这样也行不通。
任何想法,为什么这不起作用,或者我怎么能做到这一点?
在此先感谢您的帮助!
问题是,你的str变量是影响内置Python str变量。该修复很容易。只需使用另一个变量名称。
第二个问题是被替换的字符串在行列表本身中没有被替换。修复方法是将替换的字符串保存回行列表中。对于这一点,你可以使用enumerate()给你俩的价值和它的行中的位置:
for row in data:
for i, x in enumerate(row):
x = x.replace("%","")
x = x.replace("$","")
row[i] = x
您分配一个新值名称x
但这并不改变row
或data
内容。在更改x
后,您需要为适当的列索引j
(和行索引i
)分配row[j] = x
或data[i][j] = x
。另见你python 3: lists dont change their values
此外,在这种情况下,你可以使用列表理解
data = [[item.replace("%", "").replace("$", "0") for item in row] for row in data]
什么是_list expressions_?你的意思是[_list comprehension_](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)? –
当然,这是我的错误。谢谢。 –
请不要用'str'的名字在Python中的一个变量。这也是一个功能! – dawg
'for-in'不影响实际列表,因为元素被存储/复制到一个变量中,它不是一个直接引用。使用枚举和访问列表。 – Li357
我会更新,我没有在我的代码中真正拥有它,我只是为了清晰起见而这样写的。 –