iterable のすべての要素を別の iterable のすべての要素と組み合わせることを考えるたびに、 itertools.product を考えてください。これは、2 つのセット (またはリスト) のデカルト積です。
これまでにここで提示されたものよりもわずかに高速なソリューションを見つけました。@daniel ソリューションよりも 2 倍以上高速です (ただし、彼のソリューションははるかにエレガントに見えます)。
import itertools
[x + y for (x,y) in (itertools.product('ABCD', map(str,range(1,5))))]
ここでの違いは、マップを使用して int を文字列にキャストしたことです。通常、ベクトルに関数を適用する方が、個々の項目に適用するよりも高速です。
複雑な理解を扱うときの一般的なヒント:
内包表記の中に for や条件文がたくさんある場合は、次のように複数の行に分割します。
[S[j]+str(i) for i in range(1,11)
for j in range(3)
for S in "ABCD"]
この場合、読みやすさの変化はそれほど大きくありませんでしたが、条件文と for がたくさんあると、大きな違いが生じます。これは for ループと入れ子になった if ステートメントを書くのとまったく同じですが、":" と ID はありません。
通常の fors を使用したコードを参照してください。
ans = []
for i in range(1,11):
for j in range(3):
for S in "ABCD":
ans.append(S[j] + str(i))
ほぼ同じです:)