Skip to main content
 首页 » 编程设计

python之生成元组的修改副本

2025年05月04日27itcoder

我知道我不能修改一个元组,我已经看到了从另一个元组创建一个元组的方法,手动连接原始元组的各个部分,比如 here .

但是想知道是否已经出现了一些 pythonic 方式来通过隐式创建一个新元组来“修改”一个元组

>>> source_tuple = ('this', 'is', 'the', 'old', 'tuple') 
>>> new_tuple = source_tuple.replace(3, 'new') 
>>> new_tuple 
('this', 'is', 'the', 'new', 'tuple') 

一个可能的实现看起来像这样,但我正在寻找一个内置解决方案:

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() 

实现这样的功能并不需要太多工作,但就像 Enum 已经证明,有时让每个人都使用一个实现会更好..

编辑:我的目标是不替换源元组。我知道我可以使用列表,但即使在这种情况下,我也会先制作一份副本。所以我真的只是在寻找一种方法来创建修改后的副本。

请您参考如下方法:


您可以在元组上使用切片(产生一个新元组)并连接:

>>> x=3 
>>> new_tuple=source_tuple[0:x]+('new',)+source_tuple[x+1:] 
>>> new_tuple 
('this', 'is', 'the', 'new', 'tuple') 

然后您可以像这样支持列表或元组:

>>> def replace_at(source, index, value): 
...     return source[0:index]+type(source)((value,))+source[index+1:] 
... 
>>> replace_at([1,2,3],1,'new') 
[1, 'new', 3] 
>>> replace_at((1,2,3),1,'new') 
(1, 'new', 3) 

或者,直接在列表上做:

>>> source_tuple = ('this', 'is', 'the', 'old', 'tuple') 
>>> li=list(source_tuple) 
>>> li[3]='new' 
>>> new_tuple=tuple(li) 
>>> new_tuple 
('this', 'is', 'the', 'new', 'tuple') 

如评论中所述——这就是列表的用途...