我不确定为什么字符串和元组是不可变的; 使它们不可变的优点和缺点是什么?
我知道我无法修改元组,而且我已经看到了从另一个像这里手动连接原始部分的元组创建元组的方法。
但是想知道是否已经出现了一些通过隐式创建一个新元组来“修改”元组的pythonic方法
>>> source_tuple = ('this', 'is', 'the', 'old', 'tuple')
>>> new_tuple = source_tuple.replace(3, 'new')
>>> new_tuple
('this', 'is', 'the', 'new', 'tuple')
Run Code Online (Sandbox Code Playgroud)
一个可能的实现看起来像这样,但我正在寻找一个内置的解决方案:
def replace_at(source, index, value):
if isinstance(source, tuple):
return source[:index] + (value,) + source[index + 1:]
elif isinstance(source, list):
return source[:index] + [value,] + source[index + 1:]
else:
explode()
Run Code Online (Sandbox Code Playgroud)
实现这样的功能并没有太多工作,但是就像Enum已经证明的那样,有时每个人都使用的实现会更好..
编辑:我的目标不是替换源元组。我知道我可以使用列表,但即使在这种情况下,我也会先复制一份。所以我真的只是在寻找一种方法来创建修改后的副本。
任何人都可以帮助我使用此代码吗?
Jobs = ()
openFile = open('Jobs.txt')
x = 1
while x != 0:
Stuff = openFile.readline(x)
if Stuff != '':
Jobs.append(Stuff)
else:
x = 0
Run Code Online (Sandbox Code Playgroud)
此代码抛出:
AttributeError: 'tuple' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)
我正在使用 Python 3.6。
我正在建立这两个问题,因为它们没有完全回答我的问题: 如何更改元组中的值? Python:用空格替换“-”
如果我有一个像这样的元组:
worldstuff = [('Hi', 'Hello-World', 'Earth'), ('Hello-World', 'Hi'), ...]
Run Code Online (Sandbox Code Playgroud)
如何将元组中所有列表中的所有元素的破折号替换为空格?上一个堆栈溢出问题涉及更改元组中一个列表的特定索引,但如果需要替换的元素多次出现,则不会。
我尝试执行以下操作,但不太有效:
worldstuff_new = [x.replace('-', ' ') for x in worldstuff]
Run Code Online (Sandbox Code Playgroud)
但是,如果我对元组中的特定列表执行此操作,则它适用于该元组列表。我试图避免必须做单独的列表,而是尝试一次完成所有事情。
worldstuff_new = [x.replace('-', ' ') for x in worldstuff[0]]
Run Code Online (Sandbox Code Playgroud)
我知道元组是不可变的,这就是为什么我很难弄清楚这一点。这可能吗?将不胜感激任何帮助 - 谢谢。