Gdybym miał dwa ciągi 'abc'
i 'def'
mógłbym uzyskać wszystkie ich kombinacje, używając dwóch pętli for:
for j in s1:
for k in s2:
print(j, k)
Chciałbym jednak móc to zrobić przy użyciu funkcji rozumienia list. Próbowałem wielu sposobów, ale nigdy mi się to nie udało. Czy ktoś wie, jak to zrobić?
python
for-loop
list-comprehension
John Howard
źródło
źródło
L1 = [[[e1, e2, ...], ...], ...]
->[ e for L2 in L1 for L3 in L2 for e in L3 ]
for
instrukcji jest taka sama, jak gdybyś zapisał ją jako dwiefor
pętle w dwóch oddzielnych wierszach.lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]
czy cośPonieważ jest to zasadniczo produkt kartezjański, możesz również użyć itertools.product . Myślę, że jest to jaśniejsze, zwłaszcza gdy masz więcej iterowalnych danych wejściowych.
itertools.product('abc', 'def', 'ghi')
źródło
Spróbuj też rekurencji:
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))
Daje 8 kombinacji:
abc abf aec aef dbc dbf dec def
źródło