【问题标题】:why can't I use if x == "T" x == " " to replace T为什么我不能使用 if x == "T" x == " " 来替换 T
【发布时间】:2012-09-18 19:17:03
【问题描述】:

我想写一个函数,用空格代替T。

   b=""
   xs=list("fghtThjchk")
   for x in xs:
       if x=="T" or "t":
           x==" "
           b=b+x

我可以用 .replace 来做,但我还是想知道我能不能用 list 来做。

【问题讨论】:

    标签: python list replace


    【解决方案1】:

    x==" "x=" " 不同,这就是 b 得到错误值的原因

    if x=="T" or "t": 并不意味着“x 是 'T' 或 't' 之一”。你需要这样说if x in 'Tt':if x=="T" or x=="t":

    也许这就是你想要做的事情

    b = ""
    for x in "fghtThjchk":
        if x == "T" or x == "t":
            x = " "
        b = b + x
    

    【讨论】:

      【解决方案2】:

      这条线不符合你的要求

      if x=="T" or "t":
      

      该条件的计算结果始终为真,因为"t" 被认为是真实的。

      你是说

      if x=="T" or x=="t":
      

      还有那一行

      x==" "
      

      我猜想是一个分配而不是比较:

      x=" "
      

      【讨论】:

        【解决方案3】:

        您使用的语法有点不正确。 下面给出了在列表推导中使用 if/else 的正确方法:

        ''.join([' ' if x=='T' or x=='t' else x for x in xs])

        -- 当字符串长度较大时,此方法速度更快且优化。

        -- 我们在上面的答案中一次又一次地创建字符串对象,不推荐这样做。

        -- 所以在对列表执行所有操作后总是使用 join() 加入列表,而不是在循环中使用 string concatenation

        【讨论】:

          【解决方案4】:

          我们可以使用re(正则表达式)模块,速度很快:

          import re
          aa = re.sub(r'([.tT])', " ", "fghtThjchk")
          

          【讨论】:

            【解决方案5】:

            你需要通过索引来引用列表,比如这样:

            for i, x in enumerate(xs):
                if x in ["T", "t"]:
                    xs[i] = " "
            

            【讨论】:

            • 这是我的第一个想法,然后我看到他们正在b中构建新字符串
            【解决方案6】:

            当您执行for x in xs 时,您一次将名称x 分配给xs 的每个元素。当您执行x=" "(我认为== 是一个错字)时,您正在重新分配名称x,但不会更改xs 中的原始元素。

            【讨论】:

              猜你喜欢
              • 2022-01-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-24
              相关资源
              最近更新 更多