【问题标题】:Replacing string element in for loop Python替换for循环Python中的字符串元素
【发布时间】:2016-09-25 20:45:08
【问题描述】:

我正在从文本文件中读取数据,因此每一行都是一个字符串列表,所有这些列表都在一个数据列表中。所以我的列表看起来像:

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 中变量的名称。也是一个函数!
  • for-in 不会影响实际列表,因为元素被存储/复制到变量中,它不是直接引用。使用枚举和访问列表。
  • 我会更新的,我的代码中实际上并没有这种方式,为了清晰起见,我只是这样写的。
  • @CRT 我还进行了编辑以显示代码的第二个问题和使用 enumerate() 的简单补救措施。

标签: python python-2.7


【解决方案1】:

问题在于您的 str 变量隐藏了 Python 内置的 str 变量。修复很容易。只需使用另一个变量名。

第二个问题是被替换的字符串没有在行列表本身中被替换。解决方法是将替换的字符串保存回 row 列表。为此,您可以使用enumerate() 为您提供值及其在行中的位置:

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

【讨论】:

  • 这是唯一的问题吗?
  • 使用名称 str 是一种代码味道,但不会阻止它工作。
  • 我刚刚更新了它,我的代码中实际上并没有将它作为 str ,我在这里写它是为了尝试清楚我正在循环的内容。
  • @AndrewL。有两个问题。我对两者都发表了评论。
  • 谢谢,我还是 python 新手,所以我需要研究更多枚举,但这确实解决了问题。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    在这种情况下,您也可以使用列表理解

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

    【讨论】:

    • 什么是列表表达式?你的意思是list comprehension
    • 当然,这是我的错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多