2

以下を使用してリストのリストを生成しました。

board = []
for i in range(0,5):
    board.append(["#"] * 4)

どちらが返されますか:

 [['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]

そして、この関数を使用して、それらを別々の行に印刷しました:

def print_board(board):
for row in board:
    print row

どの出力:

['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']

「ボード」リストのアイテムを編集し、「ボード」のアイテムに文字列を追加できるが、すでに「ボード」のアイテムである子リストを変更できないような方法を探しています。

たとえば、board[0].function('A') は、'board' が次のようなものを返すようにします。

[['#', '#', '#', '#'] A, ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]

print_board 関数は以下を返します。

['#', '#', '#', '#'] A
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']

私の問題の要約版は次のとおりだと思います:リスト内のアイテムに文字列を追加できる関数はありますか、それ自体がリストです、またはこれは単に不可能な構文ですか?

ご協力ありがとうございました。

4

4 に答える 4

2

マトリックスを生成する簡単な方法として、これを使用できます。

>>> LoL=[['#']*4 for i in range(5)]
>>> LoL
[['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]

.insert を使用して、特定の場所にあるリストに要素を追加します。

>>> LoL.insert(1,'A')
>>> LoL
[['#', '#', '#', '#'], 'A', ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]

問題は、おそらくタイプの混合です。これを解決するには、もう 1 レベルのリストを使用します。

>>> LoL=[[['#']*4] for i in range(5)]
>>> LoL
[[['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']]]

次に、挿入の代わりに追加を使用できます。

>>> LoL[0].append('A')
>>> LoL
[[['#', '#', '#', '#'], 'A'], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']]]

リストが均一であるため、印刷が容易になります。

>>> print '\n'.join(str(i)[1:-1] for i in LoL)
['#', '#', '#', '#'], 'A'
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']

各行に辞書を使用することもできます。

>>> d={i:l for i,l in enumerate(LoL)}   #assuming that is just a LoL
>>> d
{0: [['#', '#', '#', '#']], 1: [['#', '#', '#', '#']], 2: [['#', '#', '#', '#']], 3: [['#', '#', '#', '#']], 4: [['#', '#', '#', '#']]}
>>> d[0].append('A')
>>> d
{0: [['#', '#', '#', '#'], 'A'], 1: [['#', '#', '#', '#']], 2: [['#', '#', '#', '#']], 3: [['#', '#', '#', '#']], 4: [['#', '#', '#', '#']]}
>>> d[0]
[['#', '#', '#', '#'], 'A']

次に、dict のキーを並べ替えて出力します。

>>> print '\n'.join(str(d[k])[1:-1] for k,v in sorted(d.items()) )
['#', '#', '#', '#'], 'A'
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']

編集

次の方法で印刷できます。

>>> for row in LoL:
...    for items in row:
...        print items,
...    print
... 
['#', '#', '#', '#'] A
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
于 2013-04-06T22:54:19.527 に答える
0

好きなものをリストに追加し、アイテムを好きなように組み合わせることができますが、上記の例では、文字列「A」が実際にはリストの一部ではなく、何らかの形で浮かんでいるため、構文は意味がありません.

何とかして動的に成長できる行を作成することだけが必要な場合は、リストをリスト (行を表す) 内に配置して、次のように (あらゆる種類の) 項目を行に追加できます。

board = [
[['#', '#', '#', '#'], 'A'],
[['#', '#', '#', '#']]
[['#', '#', '#', '#']]
[['#', '#', '#', '#']]
[['#', '#', '#', '#']]]

最初の行にアクセスして「A」を追加するには、次のようにします。board[0].append('A')

これがあなたの質問に答えることを願っています。

于 2013-04-06T23:07:43.340 に答える