0

現時点で私のコードは次のとおりです

A = [matrix_x[i][:n] for i in xrange(0, n)]
B = [matrix_x[i][n:] for i in xrange(0, n)]
C = [matrix_x[i+n][:n] for i in xrange(0, n)]
D = [matrix_x[i+n][n:] for i in xrange(0, n)]

同じ xrange を継続的にループしているため、これを行うためのより良い方法はありますか。この場合、リスト内包表記を使用せず、単一の for ループ内で各リストに値を追加するだけのほうがよいでしょう。

A,B,C,D = [],[],[],[]
for i in xrange(0,n):
    A.append(matrix_x[i][:n])
    B.append(matrix_x[i][n:])
    ... etc

2番目の方法は、私にはより効率的です。より「pythonic」な方法は何ですか、または私が考えていなかった別の方法はありますか

4

3 に答える 3

2

あまり。zip()創造的に使用して 4 つのリストすべてを一度に生成できますが、それを「より良い」と呼ぶのは非常に難しいでしょう。

于 2012-07-17T08:05:05.420 に答える
1

私は通常、一度に i 番目のアイテムを処理するよりも、アイテムのリスト自体を反復処理することを好みxrange(len(list_of_items))ます。zipシーケンス内の各(this,next)ペアを見て、リストを作成する方法は次のとおりです。

A,B,C,D = [],[],[],[]
for this_,next_ in zip(matrix_x,matrix_x[1:]):
    A.append(this_[:n])
    B.append(this_[n:])
    C.append(next_[:n])
    D.append(next_[n:])

そして、はい、これを azipの aに本当にコンパクトにすることができますzip:

A,B,C,D = zip(*((this_[:n],this_[n:],next_[:n],next_[n:])
                  for this_,next_ in zip(matrix_x,matrix_x[1:])))
于 2012-07-17T10:14:16.403 に答える
0
result = [(matrix_x[i][:n], matrix_x[i][n:], matrix_x[i+n][:n],matrix_x[i+n][n:])  for i in xrange(0, n)]

次に、要素 A、B、C、D = result[x] ごとにアンパックする必要があります

文字列であるmatrix_xでそれを行っても、期待した結果は得られませんでした。

于 2012-07-17T08:36:41.397 に答える