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

2025-02-07 08:44:00
admin
原创
76
摘要:问题描述:我想从一个字符串中读取一些字符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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2593  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1555  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   32  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   28  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   24  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用