在python中,字符串是否可变?第someString[3] = "a"
行抛出错误
TypeError:'str'对象没有 支持项目分配
我可以看到为什么(因为我可以编写someString [3] =“test”,这显然是非法的)但是有一种方法可以在python中执行此操作吗?
答案 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>