【问题标题】:Replacing char in strings替换字符串中的char
【发布时间】:2015-01-10 15:48:54
【问题描述】:

对于以下代码,我试图删除每个单词的第一个字符,但我的代码只删除最后一个单词的第一个字符。我该怎么做才能删除每个单词的所有第一个字符。

ejmin = "ej pj dj"
tfl = [0,]   
nw = ''

for i in range(len(ejmin)):
      if ejmin[i] == ' ':
         i = i + 1
         tfl.append(i)

for i in tfl:
      nw = ejmin.replace(ejmin[i], "")
print nw

【问题讨论】:

  • 我编辑了我的答案,请检查一下。

标签: python string char


【解决方案1】:

您的代码存在许多问题,但对于您的错误而言,关键问题是每次通过您分配给nw 的循环时,都会覆盖之前对其的所有分配。所以,当然,只有最后一个分配很重要!

仅仅修复它只会不断暴露越来越多的错误层 - 令人惊讶的是,您设法将这么多的问题打包到这么小的一段代码中。例如,如果您分配给ejmin 而不是nw,这将破坏所有进一步的索引。此外,ejmin.replace(ejmin[i] 不会替换“i 位置的字符”——它会替换 每次出现 的字符。 &c -- 这段代码几乎无法挽救。

最好基于字符串不可变的核心思想从头开始重写它(因此对字符串应用多次编辑是令人担忧的),而列表是可变的(所以这样的编辑很好)。所以在开始时把你的字符串变成一个列表,编辑它,完成后把它变成一个字符串:

ejmin = "ej pj dj"
aslist = list(ejmin)
aslist[0] = ''
for i, c in enumerate(aslist):
    if c == ' ': aslist[i] = ''
nw = ''.join(aslist)

【讨论】:

  • 那么如何替换每个单词的第一个字符?我了解错误是什么,但不知道如何解决问题
  • @EjminMehranian,我编辑了答案,列出了您的代码的更多实际和潜在问题(除了我第一次强调的问题),并解释了一种非常不同、更简单的方法,基于关于字符串不可变的核心事实,列表是可变的——看看吧!
【解决方案2】:

我试过切片

ejmin = "ej pj dj"
for word in ejmin.split():
    print word[1:],

【讨论】:

    【解决方案3】:
    ejmin = "ej pj dj"
    a=ejmin.split() #split it by space 
    for x in a:
        t=x[1:] #slicing it from first character to end of word
        print (t)
    

    输出:

    >>> 
    j
    j
    j
    >>> 
    

    用空格字符分割它们,并从第一个字符开始切片。

    编辑:

    ejmin = "ej pj dj"
    a=ejmin.split()
    for x in a:
        z=x[0]
        h=x+z
        print (h)
    

    输出:

    >>> 
    eje
    pjp
    djd
    >>> 
    

    【讨论】:

    • 这个词的问题是我需要保存这些字符,因为我试图将它们添加到单词的末尾,就像句子是“hello world how”一样,我正在尝试制作程序写“你好,orldw owh”
    • @EjminMehranian,您现在突然发现您的实际问题非常不同(可能使最佳答案也非常不同)- 非常 糟糕的堆栈溢出礼仪。 按照你提出的方式处理这个问题,然后打开另一个问题来解决你真正想要解决但决定一开始不告诉我们的问题!
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 2018-06-30
    • 2011-07-25
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多