大家好,
我希望有一个函数以列表为输入,返回另一个修改后的列表,但又不想改变原始列表。下面的代码是否是最佳选择?
此外,为了避免错误,如果我将元组(a)传递到modify(a)函数中,并在modify(a)函数内将元组转换为列表,那么是否更好?
非常感谢您的回复。
def modify(a):
b = a[:]
# some changes on b here
......
return b
oldlist[::-1]
给出的浅层列表副本是不够的。请使用模块 copy
中的 deepcopy
来创建一个完全独立的输入副本。from copy import deepcopy
newlist = deepcopy(oldlist)
我认为你的代码看起来非常合理,你可以用b = list(a)
替换b = a[:]
,使你的代码更加通用。另外,使用tuple(a)
没有任何意义。如果你想这么做,你可以让modify
原地修改并像这样调用它:b = modify(a[:])
。
你可以做:
>>> def swap(l):
... return l[::-1]
...
>>> my_list = [1,2,3]
>>> swap(my_list)
[3, 2, 1]
>>> my_list
[1, 2, 3]
无论是列表还是元组,它们都会被交换 :)
在不使用 a = b[::-1]
这样的代码的情况下整理你的代码:
def swapped(b):
assert len(b) == 2
return [b[1], b[0]]
函数名称的选择: swapped
相当于 swap
,就像 sorted
相当于 sort
... 这表明参数没有被改变。
这可以很容易地推广:
def gather(sequence, indices):
return [sequence[i] for i in indices]
我看不出来为什么这不是令人满意的:
按照我的意见保持它。
这只适用于长度为2的列表。
如果您发送元组也无关紧要,完全取决于您。
a = b[::-1]
来翻转两个元素列表?我没有看到任何指示你想要交换哪些索引的东西。 - g.d.d.c