我正在尝试编写一个对列表中的每个值进行平方的函数,返回一个包含单个值的平方的新列表。我将列表传递给它,它会更改原始列表。我希望不对原始列表进行任何更改,以便我可以在其他功能中使用它。
def squareset(c):
d=c
count = len(c)
print(c)
for i in range(0,(count),1):
d[i]=d[i]**2
return d
test = [1,2,3]
print(squareset(test))
print(test)
对于在int或float类型的简单变量上运行的函数,我没有遇到这个问题。
我添加了d = c行试图阻止更改列表测试,但没有区别。 print(test)产生结果[1,4,9]而不是[1,2,3]。为什么会发生这种情况?我该如何解决这个问题?
答案 0 :(得分:0)
执行d=c
只会使参数d
指向c
指向的同一对象。因此,对d
所做的每项更改都是针对c
指向的同一对象。
如果您想避免更改c
,您必须发送该对象的副本,或者在该函数内复制该对象并使用此副本。
例如,执行:
d = [i for i in c]
或:
d = c[:]
而不是:
d = c
答案 1 :(得分:0)
将列表分配给另一个变量不会复制列表。要复制,只需
def squareset(c):
d=c[:]
...
答案 2 :(得分:0)
试试这个:
def square(var):
return [x*x for x in var]
x = [1,2,3]
z = square(x)
答案 3 :(得分:0)
虽然提供的其他答案都是正确的,但我建议使用列表理解来确定您的列表。
In [4]:
test = [1,2,3]
results = [elm**2 for elm in test]
print test
print results
[1, 2, 3]
[1, 4, 9]
如果你想要一个功能:
def squareList(lst):
return [elm**2 for elm in lst]