民间,
我想有一个函数将列表作为输入,返回另一个列表,它是输入的修改,但我不想更改原始列表。以下代码是否是我能做的最好的代码?
另外,为了避免错误,如果我将元组(a)传递给函数modify(a)函数并将元组转换为modify(a)函数内的列表会更好吗?
非常感谢您的回复。
def modify(a):
b = a[:]
# some changes on b here
......
return b
答案 0 :(得分:5)
如果您的列表包含任何子列表,词典或其他“可变”元素,并且您的算法可能会对它们进行更改,那么oldlist[::-1]
给您的浅层列表副本是不够的。使用模块deepcopy
中的copy
制作完全独立的输入副本。
from copy import deepcopy
newlist = deepcopy(oldlist)
答案 1 :(得分:1)
您的代码看起来非常合理,您可以将b = a[:]
替换为b = list(a)
,以使您的代码更加通用。也没有理由使用tuple(a)
。如果你想走那条路,可以让modify
就地工作,并像b = modify(a[:])
一样调用它。
答案 2 :(得分:0)
我认为没有理由不满意:
保持这种方式,imo。
答案 3 :(得分:0)
这只适用于len 2的列表。
如果发送元组并不重要,但这完全取决于你。
答案 4 :(得分:0)
你可以这样做:
>>> def swap(l):
... return l[::-1]
...
>>> my_list = [1,2,3]
>>> swap(my_list)
[3, 2, 1]
>>> my_list
[1, 2, 3]
无论是列表还是元组都无关紧要,无论如何都要交换:)
答案 5 :(得分:0)
整理您的代码,而不是使用a = b[::-1]
:
def swapped(b):
assert len(b) == 2
return [b[1], b[0]]
选择功能名称:swapped
是swap
,sorted
是sort
...它表示arg未被变异。
这很容易概括:
def gather(sequence, indices):
return [sequence[i] for i in indices]