如果我有兩個字符串,'abc'
和'def'
,我可以用兩個for循環讓他們的所有組合:嵌套的for循環使用列表綜合
for j in s1:
for k in s2:
print(j, k)
不過,我想能夠做到這一點使用列表理解。我嘗試了很多方法,但從未設法得到它。有誰知道如何做到這一點?
如果我有兩個字符串,'abc'
和'def'
,我可以用兩個for循環讓他們的所有組合:嵌套的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 in y」子句,只需通過一個接一個地粘貼就可以在列表中理解。
由於這本質上是笛卡爾產品,所以您也可以使用itertools.product。我認爲它更清晰,特別是當你有更多的輸入迭代。
itertools.product('abc', 'def', 'ghi')
+1因爲產品比LC的更好的答案 – 2010-09-03 10:22:09
itertools再次罷工!好的解決方案 – 2014-02-13 13:58:10
嘗試遞歸太:
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
對於OP的問題,我認爲輸出結果應該給出幾個字母,並且應該有9個組合。 – Mattia 2015-07-30 08:42:04
發生了什麼事:abd,abe,acd,ace,acf,adb,adc,ade,adf,aeb,aed,afb,afc,afd,afe和所有以c,e或f開頭的數字?即使訂單不重要,也省略:bda,ade等 – 2017-03-26 02:38:01
這種方式的工作方式是,最左邊的位置只能是「a」或「d」,中間位置只能是「b」或「 e「,正確的位置只能是」c「或」f「。 – 2017-03-27 22:31:51
+1由於OP要求LC的。 – 2010-09-03 10:21:09