2017-04-03 1 views
0

複数のリスト(少なくとも1つ)を返す関数を記述します。関数戻りタプル。時々リストを取得し、タプルを得ることがあります

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) 

それを行うために、私はattrListによって決定される複数の属性のリストを照会する

list1, list2 = get_stock_atrributes_data() 

を使用することができますので、私はタプルを使用します。それは以下のように見えるです。複数のリスト(複数のリスト)を返すと、かなりうまく動作します。私は1つのリストだけを返した場合でも、その結果は、例えば、1つのリストを含むタプルです:

list1 = get_stock_atrributes_data() 

list1は今タプルではなくリストです。タプルを返すことについての説明を読んだ。タプル内の要素は自動的に解凍され、割り当てられると言われています。複数の要素を持つ返されたタプルの場合、それは機能します。しかし、1つの要素のみを含むタプルの場合、結果はアンパックされません。私はこれで混乱し、誰かが私に説明を与えることができる願っています。

答えて

2

ここでは例を使用してコードを修正し、後に結果を得ることができるはずです。

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

だからではなく、私は検索する(予告コンマ

a, = retTup([[1,2,3]]) 

そして今:としてリストVEの

a = [1,2,3] 

希望通り。

+0

良い答えですが、カンマを強調してください。 –

+0

こんにちは、それは問題を解決しました!単純なカンマで問題を解決する理由を説明するのを手伝ってください。 – dashenswen

+0

この関数は常にタプルを返します。実際にタプルの要素に興味がある場合は、それらのタプルに直接アクセスする必要があります。カンマを使用すると、タプルの最初の(そして唯一の)要素にアクセスします。 – Robbie

0

メソッドは1要素または2要素だけを返しますか?または、メソッドがX個の要素を返すことは可能ですか?

あなたは結果を変数に設定して、リストの新しいリストを作成してみてください:

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

この場合、+演算子は、追加操作を実行しますが、append()以来の戻り値はありませんここでは使用できません。

(X,)という形式のタプルまたは(X,Y,...)という形式のタプルが返された場合に、これは機能します。

関連する問題