2012-02-24 8 views
2

EDIT:私は、p iの[i] [j]はまた、変更することができる、それがより一般的にするために少し私の質問を変更しました。エレガントな方法でリスト内のリストを操作するには?

のPythonに非常に新しいです。各セルを操作するには

p = [[1.0, 3.0, 4.0, 1.0, 1.0], 
    [1.0, 1.0, 5.0, 1.0, 1.0], 
    [1.0, 6.0, 6.0, 1.0, 1.0], 
    [1.0, 4.0, 1.0, 1.0, 6.0]] 

、私が今やっていることはこれです:私は、5列のグリッドで4行になり、リスト内[同じ長さの]のリストを持っている

for i in range(len(p)): 
    for j in range(len(p[0])): 
     p[i][j] = p[i][j - 1] * c1 + p[(i + 1) % len(p)][j] * c2 

私の質問です:forループを別のループの中に持つ代わりにこれを書くよりエレガントな方法がありますか?おそらくラムダを使用して? maplambdaの組み合わせを使用して

+0

細胞で何をしたいですか?私はおそらくあなたがやっていることからあなたの意図を理解することができたかもしれませんが、それは明らかではありません。 – Kimvais

+0

私はコードのようにそれらを操作したい: 'p [i] [j] = p [i] [j - 1%len(p [0])] * c1 + p [i] [j] * c2'しかし、私はその中のためにのを取り除きたい。 – ksindi

+0

'range'を' xrange'に置き換えたかもしれません。 – hochl

答えて

2

次の2つのネストされたループをしたくない場合は、行をループすることができますし、(また、キーワードforを使用するように起こる)「リストの内包表記」を使用して、各代替の行を構築:

​​

ので、私はいくつかの提案を追加します、のpythonに新しいしている:

a)の2つの入れ子forループを使用したと間違って何もありません。私の意見では、彼らはあなたの事例を書くのに最高の(最も分かりやすく、最もエレガントな)方法です。

B)あなたが気付いてないことの1%LEN(P [0])を右、一定のでしょうか?しかし、おそらく、row[i- 1%len(row)] == row[i-1]の場合、pには1つの列しかない場合(ウェイインデックス-1の働きにより)

c)誰かがnumpy配列を見て良い提案をしました回答)。私はそれをもう一度。

0

は、トリックを行う可能性があります。

2

あなたは、インデックスを使用せずに繰り返すことができます:

for row in p: 
    for j in range(len(row)): 
     row[j] = row[j - 1 % len(row)] * c1 + row[j] * c2 

私はあなたが単一の行を操作するためのより良い方法があるかどうかを決定するためにあなたにそれを残します。

あなたは、行と列の間の相互参照したい場合は、numpyのようなものを使用する場合を除き、その後、いや、これを行うには特に良い方法は、ありません。

+0

あなたのお返事ありがとうございます。私はp [i] [j]のiも変更できるように、私の質問を少し変更してより一般的にしました。 – ksindi

関連する問題