大家好!
这个问题困扰了我好几个小时,我迫切需要帮助
这是我的代码
def function(seq):
ascending_list = list(sorted(seq, key=int))
for i in range(0, len(ascending_list) - 1, 2):
ascending_list[i], ascending_list[i + 1] = ascending_list[i + 1], ascending_list[i]
seq = ascending_list
>>> seq = [11, 91, 50, 3, 2, 6, 24]
>>> function(seq)
>>> seq
最后,当在控制台中输入“ seq”时 我希望输出修改后的整数列表[3、2、11、6、50、24、91]。 这里的问题是程序继续输出原始列表,即[11,91,50,3,2,6,24]
我执行代码时,我的代码运行正常
def function(seq):
ascending_list = list(sorted(seq, key=int))
for i in range(0, len(ascending_list) - 1, 2):
ascending_list[i], ascending_list[i + 1] = ascending_list[i + 1], ascending_list[i]
return ascending_list
>>> seq = [11, 91, 50, 3, 2, 6, 24]
>>> function(seq)
[3, 2, 11, 6, 50, 24, 91]
但是如何将这个新列表分配为'seq',以便在控制台中键入'seq'时将输出[3,2,11,6,6,50,24,91]
答案 0 :(得分:1)
分配给切片,而不是分配给seq
:
def function(seq):
ascending_list = list(sorted(seq, key=int))
for i in range(0, len(ascending_list) - 1, 2):
ascending_list[i], ascending_list[i + 1] = ascending_list[i + 1], ascending_list[i]
seq[:] = ascending_list
seq = [11, 91, 50, 3, 2, 6, 24]
function(seq)
seq
# [3, 2, 11, 6, 50, 24, 91]
如果函数中有seq = ...
,则seq
将被视为局部变量,该函数返回时将被丢弃。如果我们分配给seq
的一部分,则会就地更新您作为参数传递的那一部分。
答案 1 :(得分:1)
您必须将返回值分配给变量:
def function(seq):
ascending_list = list(seq)
ascending_list.sort(key=int)
end = -(len(ascending_list)&1) or None
ascending_list[:end:2], ascending_list[1::2] = ascending_list[1::2], ascending_list[:end:2]
return ascending_list
>>> seq = [11, 91, 50, 3, 2, 6, 24]
>>> seq = function(seq)
>>> seq
[3, 2, 11, 6, 50, 24, 91]
答案 2 :(得分:0)
您可以做的一件事是从ascending_list
返回function
:
def function(seq):
ascending_list = list(sorted(seq, key=int))
for i in range(0, len(ascending_list) - 1, 2):
ascending_list[i], ascending_list[i + 1] = ascending_list[i + 1], ascending_list[i]
return ascending_list
seq = [11, 91, 50, 3, 2, 6, 24]
seq = function(seq)
这将是最干净的方法,因为它意味着function
没有任何副作用。
您还可以function
就地修改seq
:
def function(seq):
# Note that we can call a method instead of sorted().
seq.sort()
for i in range(0, len(seq) - 1, 2):
seq[i], seq[i + 1] = seq[i + 1], seq[i]
seq = [11, 91, 50, 3, 2, 6, 24]
function(seq)