‘str’对象不支持项目分配[重复]

2025-02-07 08:44:00
admin
原创
57
摘要:问题描述:我想从一个字符串中读取一些字符s1并将其放入另一个字符串中s2。但是,分配给s2[j]会出现错误:s2[j] = s1[i] # TypeError: 'str' object does not support item assignment 在 C 语言中,这个方法是有效的:int i = j ...

问题描述:

我想从一个字符串中读取一些字符s1并将其放入另一个字符串中s2

但是,分配给s2[j]会出现错误:

s2[j] = s1[i]

# TypeError: 'str' object does not support item assignment

在 C 语言中,这个方法是有效的:

int i = j = 0;
while (s1[i] != '')
    s2[j++] = s1[i++];

我在 Python 中的尝试:

s1 = "Hello World"
s2 = ""
j = 0

for i in range(len(s1)):
    s2[j] = s1[i]
    j = j + 1

解决方案 1:

其他答案都是正确的,但是你当然可以做类似的事情:

>>> str1 = "mystring"
>>> list1 = list(str1)
>>> list1[5] = 'u'
>>> str1 = ''.join(list1)
>>> print(str1)
mystrung
>>> type(str1)
<type 'str'>

如果你真的想要的话。

解决方案 2:

在 Python 中,字符串是不可变的,因此您不能就地更改其字符。

但是,您可以执行以下操作:

for c in s1:
    s2 += c

这样做的原因是,它是以下操作的快捷方式:

for c in s1:
    s2 = s2 + c

上述代码在每次迭代时创建一个新字符串,并将对该新字符串的引用存储在中s2

解决方案 3:

分配s2[j]给给出错误

字符串是不可变的,所以你在 C 中所做的操作在 Python 中是行不通的。相反,你必须创建一个新的字符串。

我想从一个字符串中读取一些字符并将其放入其他字符串中。

使用切片:

>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print(s2)
world!

解决方案 4:

高效方法

如果您经常执行索引替换,则更高效且内存紧凑的方法是转换为不同的数据结构。然后在完成后再转换回字符串。

列表:

最简单、最容易:

s = "TEXT"
s = list(s)
s[1] = "_"
s = "".join(s)

字节数组 (ASCII):

这种方法占用的内存较少。内存也是连续的,不过如果你要进行单元素随机访问,那么这在 Python 中并不重要:

ENC_TYPE = "ascii"
s = "TEXT"
s = bytearray(s, ENC_TYPE)
s[1] = ord("_")
s = s.decode(ENC_TYPE)

字节数组 (UTF-32):

更一般地,对于基本 ASCII 集之外的字符,我建议使用 UTF-32(有时是 UTF-16),这将确保随机访问的对齐:

ENC_TYPE = "utf32"
ENC_WIDTH = 4

def replace(s, i, replacement):
    start = ENC_WIDTH * (i + 1)
    end = ENC_WIDTH * (i + 1 + len(replacement))
    s[start:end] = bytearray(replacement, ENC_TYPE)[ENC_WIDTH:]


s = "TEXT HI ひ RA ら GA が NA な DONE"
s = bytearray(s, ENC_TYPE)
replace(s, 1, "_")
s = s.decode(ENC_TYPE)

尽管这种方法可能比使用更节省内存list,但它确实需要更多的操作。

解决方案 5:

Python 中的字符串是不可变的(您无法就地更改它们)。

您要做的事情可以通过多种方式完成:

复制字符串:

foo = 'Hello'
bar = foo

通过连接旧字符串的所有字符来创建新字符串:

new_string = ''.join(c for c in oldstring)

切片并复制:

new_string = oldstring[:]

解决方案 6:

其他答案将字符串转换为列表或逐个字符构造新字符串。这些方法可能成本高昂,尤其是对于大型字符串。相反,我们可以使用切片来获取更改字符前后的字符串部分,并将它们与新字符组合在一起。

在这里,我修改了Crowman 的答案中的示例代码,使用字符串切片而不是转换为列表来替换字符串中的单个字符。

>>> str1 = "mystring"
>>> pos = 5
>>> new_char = 'u'
>>> str2 = str1[:pos] + new_char + str1[pos+1:]
>>> print(str2)
mystrung
>>> type(str2)
<class 'str'>

解决方案 7:

如果您想将特定字符换成另一个字符,则可以使用另一种方法:

def swap(input_string):
   if len(input_string) == 0:
     return input_string
   if input_string[0] == "x":
     return "y" + swap(input_string[1:])
   else:
     return input_string[0] + swap(input_string[1:])

解决方案 8:

这个解决方案怎么样:

str="Hello World"(如问题所述) srr = str+ ""

解决方案 9:

你好,你应该尝试字符串分割方法:

i = "Hello world"
output = i.split()

j = 'is not enough'

print 'The', output[1], j

解决方案 10:

'str' 是不可变的数据类型。因此 str 类型对象不支持项赋值。

s1 = "Hello World"
s2 = ['']*len(s1)
j = 0
for i in range(len(s1)):
s2[j]=s1[i]
j = j + 1
print(''.join(s2)) # Hello World
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用