按功能排序列表会导致错误的结果

时间:2016-11-08 23:43:32

标签: python sorting

在函数中传递列表作为参数时,为什么以下列表没有更改?

def foo(*x):
    y=sorted(x)
    print(y)

a=[3,2,1]

该函数返回[[3, 2, 1]],而不是[[1,2,3]]。为什么会这样?这与按值调用有关吗?

3 个答案:

答案 0 :(得分:1)

因为你的函数的参数被指定为* a,这就像说你的参数是一个未定义维度的元组

当您尝试使用嵌套列表对元组进行排序时,该值不会更改

因此你得到了一份清单(你[[3,2,1]]没有[3,2,1])

如果您尝试这样做,它将起作用

def foo(*x): 
    y=sorted(x[0]) 
    print(y)

答案 1 :(得分:1)

为什么要创建另一个功能? 你可以这样做

>>> a = [3,2,1]
>>> sorted(a)
[1, 2, 3]

但是如果你想创建另一个功能。你必须打电话给它。

def foo(x):
    y=sorted(x)
    return y
a = [3,2,1]
print(foo(a))

答案 2 :(得分:1)

正如Blue Monday所说,没有必要为此创建一个新函数,你应该只调用[15, 5] 函数。但是,以下是修复代码的其他几种方法。

sorted

<强>输出

a = [3, 2, 1]

def foo1(*x):
    y = sorted(*x)
    print(x, y)
    return y

print(foo1(a))

def foo2(*x):
    y = sorted(x)
    print(x, y)
    return y

print(foo2(*a))
print(foo2(5, 4, 7, 6))

请注意,([3, 2, 1],) [1, 2, 3] [1, 2, 3] (3, 2, 1) [1, 2, 3] [1, 2, 3] (5, 4, 7, 6) [4, 5, 6, 7] [4, 5, 6, 7] 希望我们传入项目以作为单独的参数进行排序。我们可以使用foo2&#34; splat&#34;来传递列表(或元组)。函数调用中的运算符。请参阅官方Python教程中的Unpacking Argument Lists