Python 函数返回元组。有时得到列表,有时得到元组

Python 函数返回元组。有时得到列表,有时得到元组,python,list,tuples,Python,List,Tuples,我编写了一个函数来返回多个列表(至少一个)。如下所示: def get_stock_atrributes_data(stock, attrList): dbClient = MongoClient() db = dbClient.StockAnnual #only query the data we need query = {attr: 1 for attr in attrList} #exclude id query['_id'] = 0

我编写了一个函数来返回多个列表(至少一个)。如下所示:

def get_stock_atrributes_data(stock, attrList):
    dbClient = MongoClient()
    db = dbClient.StockAnnual
    #only query the data we need
    query = {attr: 1 for attr in attrList}
    #exclude id
    query['_id'] = 0
    cursor = db[stock].find({}, query).sort([('date', pymongo.ASCENDING)])
    #tranform cursor to list so it becomes iterative
    l = list(cursor)
    res = []
    for attr in attrList:
        res.append([d[attr] for d in l])
    return tuple(res)
为了做到这一点,我使用tuple,所以我可以使用

list1, list2 = get_stock_atrributes_data()
查询由
attrList
确定的多个属性列表。当我返回多个列表(不止一个)时,它工作得非常好。但如果我只返回一个列表,结果是一个包含一个列表的元组,例如:

list1 = get_stock_atrributes_data()

list1
现在是一个元组而不是列表。我读了一些关于返回元组的解释。据说元组中的元素将被自动解包和分配。对于包含多个元素的返回元组,它是有效的。但是对于只包含一个元素的元组,结果不会被解包。我对此感到困惑,希望有人能给我解释。

这里有一个例子,你应该能够使用它修改你的代码并得到你想要的结果

def retTup(x):
    return tuple(x)

a,b = retTup([[1,2,3],[4,5,6]])
这将提供:

a = [1,2,3]
b = [4,5,6]
现在,如果我这样做:

a = retTup([[1,2,3]])
我将为a获取一个元组:

a = ([1,2,3],)
因此,我将列表检索为:(注意逗号)

现在:

a = [1,2,3]

根据需要。

下面是一个示例,您应该能够使用它修改代码并获得所需的结果

def retTup(x):
    return tuple(x)

a,b = retTup([[1,2,3],[4,5,6]])
这将提供:

a = [1,2,3]
b = [4,5,6]
现在,如果我这样做:

a = retTup([[1,2,3]])
我将为a获取一个元组:

a = ([1,2,3],)
因此,我将列表检索为:(注意逗号)

现在:

a = [1,2,3]

根据需要。

该方法只返回1个元素还是2个元素?或者该方法是否可以返回X多个元素

您可以尝试将结果设置为一个变量,然后创建一个新的列表:

results = get_stock_attributes_data()
arranged_results = []
arranged_results = [arranged_results + element for element in results]
本例中的+运算符执行追加操作,但由于
append()
没有返回值,因此不能在此处使用


这应该适用于以下情况:返回的元组形式为
(X,)
,或
(X,Y,…)

方法只返回1个元素还是2个元素?或者该方法是否可以返回X多个元素

您可以尝试将结果设置为一个变量,然后创建一个新的列表:

results = get_stock_attributes_data()
arranged_results = []
arranged_results = [arranged_results + element for element in results]
本例中的+运算符执行追加操作,但由于
append()
没有返回值,因此不能在此处使用


这应该适用于以下情况:返回的元组形式为
(X,)
(X,Y,…)

回答得好,但请强调逗号。您好,它解决了问题!你能帮我解释一下为什么用一个简单的逗号就能解决这个问题吗?这个函数总是返回一个元组,所以如果你真的对元组的元素感兴趣,你必须直接访问它们。当你使用逗号时,它访问元组的第一个(也是唯一一个)元素。回答得好,但请强调逗号。嗨,它解决了问题!你能帮我解释一下为什么用一个简单的逗号就能解决这个问题吗?这个函数总是返回一个元组,所以如果你真的对元组的元素感兴趣,你必须直接访问它们。使用逗号时,它访问元组的第一个(也是唯一的)元素。