質問しているコード行は、リスト内包表記を使用してリストを作成し、このリストで収集されたデータをに割り当てていますself.cells
。と同等です
self.cells = []
for i in xrange(region.cellsPerCol):
self.cells.append(Cell(self, i))
説明:
これがどのように機能するかを最もよく説明するために、いくつかの簡単な例が、使用しているコードを理解するのに役立つ場合があります。Pythonコードで作業を続ける場合は、リスト内包表記に再び遭遇するので、自分でそれを使用することをお勧めします。
以下の例では、両方のコードセグメントは、リストに格納された値のを作成するという点で同等であることに注意してください。list
myList
例えば:
myList = []
for i in range(10):
myList.append(i)
と同等です
myList = [i for i in range(10)]
リスト内包表記もより複雑になる可能性があるため、たとえば、値をリストに入れるかどうかを決定する条件がある場合は、リスト内包表記でこれを表現することもできます。
この例では、リスト内の偶数の値のみを収集します。
myList = []
for i in range(10):
if i%2 == 0: # could be written as "if not i%2" more tersely
myList.append(i)
および同等のリスト内包表記:
myList = [i for i in range(10) if i%2 == 0]
最後の2つのメモ:
- リスト内包表記を「ネスト」することはできますが、すぐに理解しにくくなります:)
- リスト内包表記は、同等のforループよりも高速に実行されるため、効率を懸念する通常のPythonプログラマーに人気があります。
さて、最後の例は、リストで繰り返し処理しているアイテムにも関数を適用できることを示しています。これはfloat()を使用して、文字列のリストをfloat値に変換します。
data = ['3', '7.4', '8.2']
new_data = [float(n) for n in data]
与える:
new_data
[3.0, 7.4, 8.2]