2016-07-13 1 views
0
def ensure_list(papers): 
    if type(papers) is not list: 
     papers = [papers] 
    return papers 

papers = 1 
try: 
    papers.append(7) 
except: 
    print "not a list" 
papers = ensure_list(papers) 
papers.append(5) 
for item in papers: 
    print item 

この質問は、変数をチェックし、変数をタイプに変更する最良の方法が何であるかを尋ねています。 最初の要素としてオブジェクトを含むリストを論文にするより良い方法はありますか?私は、オブジェクトまたはオブジェクトのリストを与えることができるいくつかのコードを書いています。オブジェクトであれば、それをリストに追加して処理したいと思います。Python:リストでない場合、項目をリストにするもっとも平凡な方法は何ですか。

これは一度だけ実行されるため、これを実行するには別の機能が必要です。

編集: 要素は常に既知の型(カスタムクラス)であり、常にカスタム型オブジェクトまたはカスタム型オブジェクトのリストになります。ここで

答:(Random832ありがとう)

papers if isinstance(papers, list) else [papers] 

EDIT2:これは何かがリストであるかどうかを確認する方法を求めていないので、これは他の質問の重複ではありません。この質問は、変数をチェックして変数を型に変更する最良の方法が何であるかを尋ねています。これは本当に好きなタイプに適用されますが、一般的な答えはisinstanceとインラインであることです。この特定の質問の質問に対する答えは、他の質問が列挙されているところではどこでもRandom832によって提供されるインラインステートメントです。あなたがそれにフラグを立てる前に、質問を読んで理解してください。

+0

さて、あなたはいくつかのことを決めなければなりません。それがタプルの場合はどうでしょうか?またはジェネレータ表現ですか?リストの要素は常に整数か、少なくとも常に既知の型の要素ですか?リストに( '.append(5)'のように)もっと多くの項目を追加する必要がありますか、まさにその例です。あなたがループしている場合、他のコレクションと同じことをすることができます。 – Random832

+0

"sleeker"の意味は分かりませんが... "isinstance(papers、list)else [papers]"のようにチェックインラインにすることはできますが、特に "洗練された"もしあなたがそれを何度もやらなければならない場合。 – Random832

+0

私は、あなたのプログラムを(再)設計することが最善の策だと考えています。そのため、前の関数は、あなたが進むにつれて「保証」や型を変更するのではなく、必要な型を返します。 – tenwest

答えて

0

ここではインライン化されています(Random832ありがとう)

papers if isinstance(papers, list) else [papers] 

以前の機能は、あなたがそれらをする必要が型を返すように行うための最善のことは、(再)設計(の一部)あなたのプログラムにあります。 (ありがとうtenwest

関連する問題