現時点では、ある種の視覚的なテキストマップの文字を口述に入れる方法として、次のようなものがあります。しかし、この二重反復を行うための本当に素晴らしく簡潔でpythonicな方法があるかどうか疑問に思っています。何か案は?
lines = ['abc','456','xyz']
chars = {}
for i, row in enumerate(lines):
for j, c in enumerate(row):
chars[i,j] = c
現時点では、ある種の視覚的なテキストマップの文字を口述に入れる方法として、次のようなものがあります。しかし、この二重反復を行うための本当に素晴らしく簡潔でpythonicな方法があるかどうか疑問に思っています。何か案は?
lines = ['abc','456','xyz']
chars = {}
for i, row in enumerate(lines):
for j, c in enumerate(row):
chars[i,j] = c
あなたはそれを辞書の理解として表現することができます:
chars = {(i, j): c for i, row in enumerate(lines) for j, c in enumerate(row)}
これは基本的に同じ反復ですが、表現が少し異なります。
dict 内包表記を使用します。ネストされた内包表記を読むための鍵: 「通常のループのように読んでください。「大きなループ」が最初に記述され、その後のループがその中にネストされています。 1
In [1]: lines = ['abc','456','xyz']
In [2]: {(i,j): c for i, row in enumerate(lines) for j, c in enumerate(row)}
Out[2]:
{(0, 0): 'a',
(0, 1): 'b',
(0, 2): 'c',
(1, 0): '4',
(1, 1): '5',
(1, 2): '6',
(2, 0): 'x',
(2, 1): 'y',
(2, 2): 'z'}
内包表記を複数の行に分割して、読みやすくすることができます。よく見ると、実際には通常のループと非常によく似ており、最後の行だけが開始されます。
それに加えて、Brandon Rhodes によるブログ投稿を読むことをお勧めします。
# Comprehension # Regular for loop
{(i,j):c # chars = {}
for i, row in enumerate(lines) # for i, row in enumerate(lines):
for j, c in enumerate(row)} # for j, c in enumerate(row):
# chars[i,j] = c