2つの文字列が'abc'
あり、、の場合、'def'
2つのforループを使用してそれらのすべての組み合わせを取得できます。
for j in s1:
for k in s2:
print(j, k)
ただし、リスト内包表記を使用してこれを実行できるようにしたいと思います。私は多くの方法を試しましたが、それを得ることができませんでした。誰かがこれを行う方法を知っていますか?
回答:
lst = [j + k for j in s1 for k in s2]
または
lst = [(j, k) for j in s1 for k in s2]
タプルが必要な場合。
質問のように、for j...
は外側のループ、for k...
は内側のループです。
基本的に、次々に貼り付けるだけで、リスト内包表記に必要な数の独立した 'for x iny'句を含めることができます。
L1 = [[[e1, e2, ...], ...], ...]
- >[ e for L2 in L1 for L3 in L2 for e in L3 ]
for
ステートメントの順序は、for
2つの別々の行に2つのループとして記述した場合と同じです。
lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]
または何か
これは本質的にデカルト積であるため、itertools.productを使用することもできます。特に入力反復可能オブジェクトが多い場合は、より明確になると思います。
itertools.product('abc', 'def', 'ghi')
再帰も試してください:
s=""
s1="abc"
s2="def"
def combinations(s,l):
if l==0:
print s
else:
combinations(s+s1[len(s1)-l],l-1)
combinations(s+s2[len(s2)-l],l-1)
combinations(s,len(s1))
あなたに8つの組み合わせを与えます:
abc
abf
aec
aef
dbc
dbf
dec
def