如何在Python字符串中设置字符?

时间:2012-03-19 20:00:30

标签: python

我有一个减少字符串表示的整数参数的函数。例如,如果我传入字符串“100”,它应该返回“99”。

def dec(s):
    i = len(s) - 1
    myString = ""
    while (i >= 0):
        if s[i] == '0':
            s[i] = '9'
            i -= 1
        else:
            s[i] = chr(int(s[i]) - 1)
            break
    return s

但是,Python会发出此错误。

s[i] = '9'
TypeError: 'str' object does not support item assignment 

我假设s[i]不能被视为左值。围绕这个解决方案是什么?

6 个答案:

答案 0 :(得分:3)

你可以这样做:

s = s[:i] + "9" + s[i+1:]

这将在字符索引i之前获取字符串的一部分,附加9,然后在字符索引i之后附加字符串的一部分。但是,像这样做很多字符串追加并不是非常有效。

另一个答案是,如果您正在处理数字,为什么不实际使用数字而不是字符串?

def dec(s):
    return str(int(s) - 1)

答案 1 :(得分:1)

你做不到。在Python中,字符串是不可变的 - 一旦创建,它们就无法更改。

您可以在不完全更改功能的情况下使用两个选项。

将字符串转换为列表并返回:

def dec(s):
    s = list(s)
    i = len(s) - 1
    myString = ""
    while (i >= 0):
        if s[i] == '0':
            s[i] = '9'
            i -= 1
        else:
            s[i] = chr(int(s[i]) - 1)
            break
    return ''.join(s)

每次要进行更改时都要创建一个新字符串:

def dec(s):
    i = len(s) - 1
    myString = ""
    while (i >= 0):
        if s[i] == '0':
            s = s[:i] + "9" + s[i+1:]
            i -= 1
        else:
            s = s[:i] + chr(int(s[i]) - 1) + s[i+1:]
            break
    return s

答案 2 :(得分:1)

我不确定你为什么要逐字逐句地使用字符串。这不是更简单吗?

def decrement_string(s):
    try:
      i = int(s)
      i = i - 1
      return str(i)
    except:
      # do something else
      return "that's no number!"

while True:
  s = raw_input("give me a number and I'll decrement it for you: ")
  print decrement_string(s)

答案 3 :(得分:0)

“减少”字符串的特定问题的解决方案是将s转换为带int(s)的int,减少该值,然后转换回str:str(int(s)-1)

In [175]: str(int('100')-1)
Out[175]: '99'

一般的解决方案是不要试图改变字符串的元素;使用其他类型来表示你的工作,并转换为字符串作为最后一步。

答案 4 :(得分:0)

Python字符串是不可变的,因此您无法修改它们。您必须创建一个包含所需值的新字符串。你最好将字符串转换为整数,递减它,然后再将其转换回整数。

不可变字符串的原因主要是效率。

答案 5 :(得分:0)

字符串不可变,但列表是。您可以轻松地将字符串转换为单个字符列表:

l = list(s)

然后将其转换回来:

s = ''.join(l)

由于您正在使用数字字符串,因此有更多直接方法,但这个答案适用于一般情况。