31

このPythonコードスニペットの最後の行を誰かが私に説明できますか?

Cellただの別のクラスです。オブジェクトをオブジェクトforに格納するためにループがどのように使用されているのかわかりません。CellColumn

class Column(object):

    def __init__(self, region, srcPos, pos):

        self.region = region
        self.cells = [Cell(self, i) for i in xrange(region.cellsPerCol)] #Please explain this line.
4

2 に答える 2

76

質問しているコード行は、リスト内包表記を使用してリストを作成し、このリストで収集されたデータをに割り当てていますself.cells。と同等です

self.cells = []
for i in xrange(region.cellsPerCol):
    self.cells.append(Cell(self, i))

説明

これがどのように機能するかを最もよく説明するために、いくつかの簡単な例が、使用しているコードを理解するのに役立つ場合があります。Pythonコードで作業を続ける場合は、リスト内包表記に再び遭遇するので、自分でそれを使用することをお勧めします。

以下の例では、両方のコードセグメントは、リストに格納された値のを作成するという点で同等であることに注意してください。listmyList

例えば:

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]
于 2012-07-13T23:00:07.360 に答える
1

これを行った場合と同じです。

def __init__(self, region, srcPos, pos):
    self.region = region
    self.cells = []
    for i in xrange(region.cellsPerCol):
        self.cells.append(Cell(self, i))

これはリスト内包と呼ばれます。

于 2012-07-13T22:59:11.987 に答える