1
我想將兩個輸入列表合併在一起,並獲取其元素的所有排列,以便保留每個輸入列表中元素的排序。排序的兩個列表中的元素與訂單限制
舉例來說,如果我有兩個列表:['b','a']
和['c','d']
,我想獲得以下列表:
['b', 'a', 'c', 'd'],
['b', 'c', 'a', 'd'],
['b', 'c', 'd', 'a'],
['c', 'b', 'a', 'd'],
['c', 'b', 'd', 'a'],
['c', 'd', 'b', 'a']
這裏從原來的列表中元素的順序被保留(B來之前一個,c在d)之前。
我發現一個帖子處理類似的問題,但使用字符串作爲輸入,而不是列表:Restricted Permutations of Strings in Python。例如,將字符串「ba」和「cd」作爲輸入,將返回字符串「bacd」,「bcad」,「bcda」,「cbad」,「cbda」,「cdba」。
我試圖調整我的問題的代碼,但它沒有奏效。使用與上面相同的例子,我得到了[None,None,None,None,None,None],而不是我期望的6個列表。以下是我使用的代碼。
def ordered_permutations(list1, list2):
perms = []
if len(list1) + len(list2) == 1:
return [list1 or list2]
if list1:
for item in ordered_permutations(list1[1:], list2):
perms.append([list1[0]].append(item))
if list2:
for item in ordered_permutations(list1, list2[1:]):
perms.append([list2[0]].append(item))
return perms
'list.append'是就地操作,如在Python傳統,因此返回'None' 。 – jonrsharpe 2014-10-10 17:54:22
'list.append'返回'None'。你想'perms.append([list1 [0]] + item)'。 – zch 2014-10-10 17:55:55
謝謝!我用'perms.append([list1 [0]] + item)'替換了'perms.append([list1 [0]]。append(item))'',它工作正常! – ben 2014-10-10 18:00:04