簡體   English   中英

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

[英]How do I set characters in a Python string?

我有一個函數,可以減少由字符串表示的整數參數。 例如,如果我輸入字符串“ 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]不能被視為左值。 對此有什么解決方案?

你可以做:

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

這需要前字符索引字符串的一部分i ,附加一個9 ,然后追加字符索引之后的字符串的一部分i 但是,像這樣進行大量的字符串追加並非十分有效。

另一個答案是,如果要處理數字,為什么不實際使用數字而不是字符串呢?

def dec(s):
    return str(int(s) - 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

我不確定您為什么要逐個字符串地玩游戲。 這不是更簡單嗎?

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)

解決您的“減少”字符串的特定問題的解決方案是將s轉換為具有int(s) ,將其減少,然后再轉換回str: str(int(s)-1)

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

一般的解決方案是不要嘗試更改字符串的元素; 使用其他類型來表示您的作品,並最后轉換為字符串。

Python字符串是不可變的,因此您無法對其進行修改。 您必須創建一個包含所需值的新字符串。 最好將字符串轉換為整數,將其遞減,然后再次將其轉換回整數。

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

字符串不是可變的,但列表是可變的。 您可以輕松地將字符串轉換為單個字符的列表:

l = list(s)

然后將其轉換回:

s = ''.join(l)

由於您使用的是數字字符串,因此有更多直接方法,但是此答案適用於一般情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM