2017-12-21 19 views
-3

サンプルコード1とその結果を示します。py3.xのlist()と[]の実装の違いは何ですか?

d ={ 
    "name":"looser", 
    "roll":6666, 
    "profile" : "developer" 
} 

print("list formatted dict is {}".format([d])) 

for k,v in [d.items()]: 
    if d[k] is "developer": 
     d.pop(k) 
    else: 
     print(k) 

結果:ここ

list formatted dict is [{'name': 'looser', 'roll': 6666, 'profile': 'developer'}] 
Traceback (most recent call last): 
    File "/Users/rough/try.py", line 18, in <module> 
    for k,v in [d.items()]: 
ValueError: too many values to unpack (expected 2) 

Process finished with exit code 1 

は、改変された形態を有するサンプルCODE2あります。

d ={ 
    "name":"looser", 
    "roll":6666, 
    "profile" : "developer" 
} 

print("list formatted dict is {}".format([d])) 

for k,v in list(d.items()): 
    if d[k] is "developer": 
     d.pop(k) 
    else: 
     print(k) 

結果:人々は差がない私に言う多くの場所で

list formatted dict is [{'name': 'looser', 'roll': 6666, 'profile': 'developer'}] 
name 
roll 

Process finished with exit code 0 

、それは何の違い、なぜこのような結果が存在しない無difference.Ifがない事実です。

1は の私の問題を解決しているので**例外RuntimeError:以外の

a = list() 

a = [] 

:辞書にはほとんど差があります**反復中

+1

反復を 'list'に強制することは、一つの項目(それが何であれ)を' list'に入れることと同じではありません。 –

+0

コメントは議論の延長ではありません。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/161729/discussion-on-question-by-theexorcist-what-is-the-difference-between-implementat)。 – deceze

答えて

4

をサイズ変更名前ルックアップにかかる時間と組み込み時間の比較[]Why is [] faster than list()?

listに項目を渡すと、listに反復しようとします。新しいリストを作成するにはを実行してください。

help(list)出力から:

class list(object)

| list() -> new empty list

| list(iterable) -> new list initialized from iterable's items

listオブジェクトを作成するときにSO 2 "モード" があります。

お試しくださいlist(3)TypeError: 'int' object is not iterableエラーが表示される場合は、[3]に1要素のリストが表示されます。

d.items()オブジェクトを渡すときに違いはありません。

  • list(d.items())は、項目をタプルのリストに反復/変換します。
  • [d.items()]内部の単一の要素でリストを作成します(2つの要素に開梱が失敗したと説明している)d.items()

はまた、あなたがそれに反復しながら、あなたの辞書から項目を削除する場合を除きfor k,v in list(d.items()):が必要ではないことに注意してください

この場合を除いて、d.items()は既に反復可能であり、リスト内でラッピングする必要はありません(そして、それは何も役に立ちません(それはあなたの最近の編集を見ている問題です)。さらに遅い)

1

[]は、定義したとおりにリストを作成するリテラルです。 ['a']は1つの項目を含むリストです。 [d.items()]も1つの項目のリストです。その1つのアイテムは多くのアイテムですk, vを解凍できません。

list()は、新しいリストを作成するためにを反復可能なとなるコンストラクタ形式です。 list('a')['a']と同じです。 list('ab')['a', 'b']と等しく、それは反復可能な文字列'ab'を反復処理します。 list(d.items())d.items()のすべての項目を反復処理し、リスト[('name', 'looser'), (...)]を作成します。これは、多くの2項目タプルを持つリストで、個々にk, vに解凍されます。

+0

まだ私の質問には答えられないので、何とか同じではない、あるいは私はジレンマに陥っています。 – TheExorcist

+0

あなたが私が書いたことを理解していれば、あなたの質問に答えるべきです。 '[d.items()]'は一つの項目を持つリストです。 'list(d.items())'は多くのタプルを持つリストです。そう、はい、違います。 – deceze

+0

それはnoobiesと同じように見えますが、細かい実装方法では異なって動作します。私はそれに同意できます。 – TheExorcist

関連する問題