【问题标题】:Can I remove multiple indexes from a string with a for loop? [duplicate]我可以使用 for 循环从字符串中删除多个索引吗? [复制]
【发布时间】:2019-11-14 14:12:19
【问题描述】:

我是 Python 新手,目前只是在搞乱一点……但我被这个问题困住了。我正在尝试使用 for 循环从字符串中删除某些索引。我的想法是这样的:

Text="Gvusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas"
for i in range(0,7):
    Text=Text.replace(Text[i], "")
print(Text)

但它只删除一个索引并恢复已替换的索引,例如:

1.loop: vusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas
2.loop: Gusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas

【问题讨论】:

  • 变量不应以大写字符开头 :)

标签: python python-3.x string


【解决方案1】:

当然,有很多方法可以得到想要的结果。下面,有一个基于您的逻辑的好方法(使用for loop)。当您用空字符替换字符时,最好直接删除所需的字符。

在代码中,我将text 转换为list 以便于处理。之后,我根据索引删除了所有字符。最后,连接操作产生所需的text

text = "Gvusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas"
text_list = list(text)
for index in range(0, 7):
    text_list.remove(text[index])

text = ''.join(text_list)
print(text)   # dsz8audvbsauzdgsavuczisagbcsuzaicbhas

【讨论】:

    【解决方案2】:

    如果我理解您要执行的操作,您正在尝试省略索引 0、1、2、3、4、5 和 6 中的字符串 Text 中的字母。但您的代码不这样做目前,但实际上它将采用第一个字母 G 并将其从所有字符串中删除(出现一次),下一个循环 Text 等于 u 因为 Text 是相等的vusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas 在第一次迭代中省略G 后,因为u 出现五次,文本将等于vsaibdsz8advbsazdgsavczisagbcszaicbhas 等等..

    您可以将print(Text) 放在 for 循环中并观察结果:

    >>> Text="Gvusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas"
    >>> for i in range(0,7):
    ...     Text=Text.replace(Text[i], "")
    ...     print(Text)
    ... 
    vusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas
    vsaibdsz8advbsazdgsavczisagbcszaicbhas
    vsibdsz8dvbszdgsvczisgbcszicbhs
    vsidsz8dvszdgsvczisgcszichs
    vidz8dvzdgvczigczich
    viz8vzgvczigczich
    viz8vzvcziczich
    

    在 Python 中,您可以在没有循环的情况下执行此操作,最好的方法是使用 slicing,如下所示:

    Text = Text[7:]
    

    这将为您提供等于 dsz8audvbsauzdgsavuczisagbcsuzaicbhas 的文本。

    如果您的目标是通过循环达到此目的(假设您在每次迭代中都需要 Text),您可以试试这个:

    >>> Text="Gvusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas"
    >>> for i in range(0,7):
    ...     Text = Text[1:]
    ...     print(Text)
    ... 
    vusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas
    usaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas
    saibdsz8audvbsauzdgsavuczisagbcsuzaicbhas
    aibdsz8audvbsauzdgsavuczisagbcsuzaicbhas
    ibdsz8audvbsauzdgsavuczisagbcsuzaicbhas
    bdsz8audvbsauzdgsavuczisagbcsuzaicbhas
    dsz8audvbsauzdgsavuczisagbcsuzaicbhas
    

    我希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      看看字符串slicing:

      text = "Gvusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas"
      newtext = text[1:]
      print(newtext)
      

      --> "Gvusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas"
      --> "vusaibdsz8audvbsauzdgsavuczisagbcsuzaicbhas"

      【讨论】:

        【解决方案4】:

        你可以替换

        Text=Text.replace(Text[i], "")
        

        Text = Text[:i] + Text[i+1:]
        

        它使用切片来重建没有特定索引的字符串。

        旁注:变量名应该小写。

        【讨论】:

        • 非常感谢
        • 太棒了。您能否通过单击复选标记来接受此答案。
        猜你喜欢
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多