【问题标题】:function return tuple. sometimes get lists, sometimes get tuple函数返回元组。有时获取列表,有时获取元组
【发布时间】:2017-04-03 12:26:04
【问题描述】:

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

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)

为了做到这一点,我使用元组,所以我可以使用

list1, list2 = get_stock_atrributes_data()

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

list1 = get_stock_atrributes_data()

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

【问题讨论】:

    标签: python list tuples


    【解决方案1】:

    这是一个例子,你应该可以使用它来修改你的代码并得到你想要的结果。

    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, = retTup([[1,2,3]])
    

    现在:

    a = [1,2,3]
    

    根据需要。

    【讨论】:

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

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

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

    results = get_stock_attributes_data()
    arranged_results = []
    arranged_results = [arranged_results + element for element in results]
    

    本例中的+操作符执行追加操作,但由于append()没有返回值,所以这里不能使用。

    这应该适用于返回(X,)(X,Y,...) 形式的元组的情况。

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 2012-02-11
      • 2021-04-25
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多