更新变量的值

时间:2018-10-20 16:10:43

标签: python python-3.x

大家好!

这个问题困扰了我好几个小时,我迫切需要帮助

这是我的代码

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]

3 个答案:

答案 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)