替换python中字符串的一个字符

时间:2010-01-29 21:09:34

标签: python

在python中,字符串是否可变?第someString[3] = "a"行抛出错误

  

TypeError:'str'对象没有   支持项目分配

我可以看到为什么(因为我可以编写someString [3] =“test”,这显然是非法的)但是有一种方法可以在python中执行此操作吗?

6 个答案:

答案 0 :(得分:16)

Python字符串是不可变的,因此它们不支持项目或切片分配。您必须使用someString[:3] + 'a' + someString[4:]或其他合适的方法构建新字符串。

答案 1 :(得分:8)

您可以使用字符列表代替将值存储为字符串:

>>> l = list('foobar')
>>> l[3] = 'f'
>>> l[5] = 'n'

然后,如果要将其转换回字符串以显示它,请使用:

>>> ''.join(l)
'foofan'

如果您一次更改一个字符,此方法将比每次更改字符时构建新字符串快得多。

答案 2 :(得分:2)

在足够新的蟒蛇中,你也可以使用内置的bytearray类型,它是可变的。请参阅stdlib文档。但是“足够新”在这里意味着2.6或更高,所以这不一定是一种选择。

在旧蟒蛇中,你必须如上所述创建一个新的str,因为它们是不可变的。这通常是最易读的方法,但有时使用不同类型的可变序列(如字符列表,或可能是array.array)是有道理的。 array.array虽然有点笨拙,但通常会避免。

答案 3 :(得分:1)

>>> import ctypes
>>> s = "1234567890"
>>> mutable = ctypes.create_string_buffer(s)
>>> mutable[3] = "a"
>>> print mutable.value
123a567890

答案 4 :(得分:0)

使用这个:

someString.replace(str(list(someString)[3]),"a")

答案 5 :(得分:-1)

只需定义一个新字符串,它等于您要对当前字符串执行的操作。

<template>
  <div>
    <div class="add-item">
      <div class="textarea-item input-field" v-show="isAdding">
        <input
          type="text"
          class="validate"
          id="list-item"
          v-model="itemList"
          v-on:keyup.enter="createItemList"
          autofocus
        />
        <label for="list-item">Enter Item List</label>
      </div>
      <a class="waves-effect waves-light btn" v-show="!isAdding" @click="addCard">
        <i class="material-icons right">add</i>Add Card
      </a>
    </div>
  </div>
</template>

<script>
export default {
  data: () => ({
    isAdding: false,
    itemList: "",
  }),
  methods: {
    addCard() {
      this.isAdding = true;
    },
    createItemList() {
       if (this.itemList == "") {
        return false;
      }
      const item = {
        idItemList: Date.now(),
        itemList: this.itemList
      };

      this.$store.dispatch("createItemListt", item);
      this.itemList = "";
      this.isAdding = false;
    }
  }
};
</script>