2017-03-28 5 views
2

リストの理解を含むこのPythonコードを短縮できますか?私の現在のコードでは、変数e_colは利用されていません。私がまだ分かっていないのは、このe_col変数をどのように利用できるのかです。ここでは、コードがあります:このリストの理解を短くする方法はありますか?

e_rows = (10,34) 
e_col = (4,6,8,10,13,15,17,19) 
inst = 'A' 

test_list = [inst+'_r'+str(e_rows[0])+'c'+str(i) for i in range(4,12,2)] 
test_list.extend([inst+'_r'+str(e_rows[0])+'c'+str(i) for i in range(13,21,2)]) 
test_list.extend([inst+'_r'+str(e_rows[1])+'c'+str(i) for i in range(4,12,2)]) 
test_list.extend([inst+'_r'+str(e_rows[1])+'c'+str(i) for i in range(13,21,2)]) 

print(test_list) 

私はこのコードを実行したとき、それが返されます。

['A_r10c4', 'A_r10c6', 'A_r10c8', 'A_r10c10', 'A_r10c13', 'A_r10c15', 'A_r10c17', 'A_r10c19', 'A_r34c4', 'A_r34c6', 'A_r34c8', 'A_r34c10', 'A_r34c13', 'A_r34c15', 'A_r34c17', 'A_r34c19'] 

私もitertools.productに見えたが、私はそれがどのように動作するかを理解することはできません。

+1

あなたが実際にここで何が起こっているかを少し説明してもらえますか?これの目的は何ですか? – jonrsharpe

+0

上記のように私が意図した結果リストを得ました。私はコードを短縮し、 'e_col'タプルを利用したい – Meeyaw

答えて

1

リスト内包、無LIBS

test_list = [inst+'_r'+str(j)+'c'+str(i) for j in e_rows for i in e_col] 
+0

ありがとうございます。あなたのこの1つは、コード内で非常にきちんとしています。 – Meeyaw

6

あなたの要素の基本的な構造があるように思え:

'A_r{}c{}' # {} are the placeholders for str.format 

は、次に、あなただけのitertools.productは確かに良い賭けのように思われるため、行番号と列番号を、必要とする:

from itertools import product 

test_list = ['A_r{}c{}'.format(row, col) for row, col in product(e_rows, e_col)] 

同じ出力を返します:

>>> test_list 
['A_r10c4', 'A_r10c6', 'A_r10c8', 'A_r10c10', 'A_r10c13', 'A_r10c15', 'A_r10c17', 'A_r10c19', 'A_r34c4', 'A_r34c6', 'A_r34c8', 'A_r34c10', 'A_r34c13', 'A_r34c15', 'A_r34c17', 'A_r34c19'] 

2つの理由rangeではなく、e_colとなります。ネストされたループ、ピュアPythonで「製品」を行うことができます

+0

答えと1つのライナーコードをありがとう。しかし、実際のアプリケーションでは、結果リスト内の「A」も変数(すなわち、「inst」)である。それを考慮に入れてあなたの答えを変更するにはどうすればいいですか? – Meeyaw

+1

@Meeyawそれは非常にシンプルな調整だから、それ以上の助けなしにそれを管理できると確信しています。 – jonrsharpe

+0

途中でありがとう。そして、はい、私はそれを微調整する方法を知っています。再度、感謝します。 – Meeyaw

関連する問題