解包参数:如何阻止列表变成嵌套列表

Unpacking arguments: how to stop a list from turning to a nested list

我创建了一个名为 other_func 的函数,它生成一个列表,例如:[12,322,32]

我想创建一个函数来接收另一个函数,并将对该列表进行排序。我想使用 *args 如下所示,以更好地理解它是如何工作的:

def biggest_gap(*args):
    result = sorted(args)
    return result

问题是它会导致嵌套列表:

biggest_gap(other_func(3)) # other_func 的使用无关紧要,只是它创建了一个数字列表

[[322,32,12]]

如果我使用sort()方法:

def biggest_gap(*args):
        result = args.sort()
        return result

returns:

AttributeError: 'tuple' object has no attribute 'sort'

问题是如何阻止 'sorted' 方法创建嵌套列表并简单地创建一个列表,或者如何使 sort() 方法不抛出错误。

def biggest_gap(*args):

意味着 args 将是 一个列表(嗯,技术上是一个元组)你给 biggest_gap 函数的所有参数

biggest_gap(other_func(3))

将为 biggest_gap 函数提供 列表 。那是一个论点。

所以你得到的是“(列表)的元组”。

你的意思是给出多个单独的参数,通过“展开”从 other_func:

返回的列表
biggest_gap(*other_func(3))

* 的区别是

biggest_gap([322, 32, 12])    # without * - biggest_gap receives 1 argument
biggest_gap(*[322, 32, 12])   # with * - biggest_gap receives 3 arguments
biggest_gap(322, 32, 12)      # hard-coded equivalent

https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists

好的,这是 *args 的一个奇怪问题,因为它 returns(在这种情况下)分配给变量名称 args 的 args 元组。因此,例如,给定一个函数:

def test(*args):
    return args

会return:

>>> test("Hello", "World")
('Hello', 'World')
>>> 

一个元组。 然后,排序,这变成了一个列表。

所以,现在我们可以回过头来解决最初的问题,因为嵌套列表是函数“other_function”return生成一个包含 3 个数字的列表的结果,比如 [ 1,23,44],然后将函数应用于它。

>>> sorted(test([1,23,44]))
[[1, 23, 44]]
>>> 

注意:元组没有 .sort 方法,另一种方法是使用内置的 sorted() 函数。