2016-11-20 7 views
2

Pythonでforループを使用してリストのリストを作成しようとしています。私の計画は、2つの別々のループを使用することです。小さなリストを入れる大きなリストを作るための1つのループと、小さなリストを作成して大きなリストに加えるもう1つのループ。'ValueError:アンパックする値が不十分(期待値2、0)'

これは、10x10のグリッドがある「戦艦」タイプのゲームを作成するために使用されています。

これは私が持つ困難持っていたコードの塊です:

for i in range(0,10): 
    (newlist,(i))=[] 

この特定のコードが完成することを意図している唯一のタスクは、10件の新しいリスト、別の名前でそれぞれを作成することです。たとえば、ループの最初の循環は、list0を作成し、2番目の循環list1などをlist9まで作成します。

理論的には、私はこのコードに何も間違いはありません。また、新しいリストを作成する代わりに、新しい変数に文字列を入れているときにも機能します。私は、プログラムを実行するたびに

は、私はこれが発生する理由はわかりませんし、ここで誰もが私を助けることができれば非常に感謝されるエラー

ValueError: not enough values to unpack (expected 2, got 0) 

を取得します。

+2

識別子として 'list'を使用しないでください - それはあります内蔵されています。また、あなたが期待するもの(list、(i))= [] 'が達成することはあまり明確ではありません。 –

+0

ジョンに感謝します。残念ながら、識別子としてのリストの変更は問題を解決するための何もしません。あなたが言及したコード行の目的は、それぞれ異なる名前の9つの異なるリストを作成することでした。 – Link

+0

異なる名前のリストを作成しない - サブリストまたは辞書付きリストを作成する。 – furas

答えて

1

listという変数があるようですが、これにはいくつかのリストがあります。あなたのコードは、この構文が右手側の発話から2つのデータを抽出するために使用されるため、機能しません。明らかに、[]は空ですので、はありません。を取り出してください。

あなたはこのようにそれを行うことができます:空のリストを作成し、同じ名前を持つ組み込み関数が存在するとして、あなたは変数listを呼び出すべきではありません

your_list = [list() for x in range(9)] 

注意を。今のところ、この変数はビルトインをアクセス不可能にします。

編集: あなたがリストの10本のリストする必要がある場合:

your_list = [[[] for x in range(9)] for y in range(10)] 

を次に、your_listは、リストの10本のリストを含むリストになります。

+0

乾杯。しかし、それは完全に私の完全な質問に答えるわけではありません。それでも問題の一部である最小限のコードを使用して、リストのリストを作成する手助けをしてくれました。しかし、私はリストのリストが10個必要で、それぞれのリストは異なる名前識別子を持っています。たとえば、your_list1、your_list2などです.10x10のグリッドを作成するためにループで作成されるこれらのリストのうちの10個が必要です。これはすべてですので、リスト4の項目7のように、グリッド内の位置を参照できます。 – Link

+0

@Link、編集 – ForceBru

0

後で使用する方が簡単ですので、より良いは、

all_lists = [] 
for i in range(10): 
    all_lists.append([]) 

または短い

all_lists = [ [] for i in range(10) ] 

をサブリストでリストを作成して、今、あなたはすなわち、インデックスを使用してリストにアクセスすることができます。

all_lists[0] 

最終的に辞書を作成 - あなたは、インデックス

all_lists = {} 
for i in range(10): 
    all_lists[i] = [] # first version 
    # or 
    all_lists[str(i)] = [] # second version 

または短い

all_lists = { i:[] for i in range(10) } # first version 
all_lists = { str(i):[] for i in range(10) } # first version 

として、数値や文字列を使用することができますそして今、あなたは数または文字列を使用してリストにアクセスすることができ、すなわち、

all_lists[0] # first version 
# or 
all_lists["0"] # second version 


EDIT:あなたはあなたが異なる値の代わりにデフォルトとしてNoneを使用することができます

grid = [ [None]*10 for _ in range(10) ] 

を使用することができますは、10×10のグリッドを作成します。

そして、あなたは

grid[y][x] 

まずyあるを使用することができます(x,y)位置を取得する(行)、第二はx(列)である

+0

を参照してください。辞書で正確に使用するために 'str'に変換する理由は何ですか? (そして範囲(9)の '{i:[]の同等物を表示しない)')? –

+0

OPはテキストをインデックスとして使用できることを示しています。 – furas

関連する問題