두 목록을 결합하여 원본 목록의 순서를 유지하는 병합 된 목록의 가능한 모든 조합을 출력하려고합니다. 예를 들면 : 두 개의 목록을 조합하여 순서를 유지하는 중
list_1 = [9,8]
list_2 = [2,1]
#output
combo= [9821,9281,2981,2918,2198,9218]
경우 목록 "콤보"의 각 요소에,
1 및
9 항상
8 전에 오기 전에
2 항상 제공한다.
지금까지 itertools의 순열을 사용하여 가능한 모든 순열을 반복했지만 충분히 빠르지는 않습니다.
여기에 내가 가진 무엇 :
from itertools import permutations
seq = [5, 9, 8, 2, 1]
plist = []
root = seq[0]
left = filter(lambda x: x > root, seq)
right = filter(lambda x: x < root, seq)
for pseq in permutations(seq[1:]):
pseq = (root,) + pseq
if list(filter(lambda x: x > root, pseq)) == left and list(filter(lambda x: x < root, pseq)) == right:
plist.append(pseq)
print plist
감사합니다!
당신은 정기적으로 이러한 작업을 구성 할 것으로 예상한다을 : * "먼저 * 목록을 결합하고 * 결합한 결과를 정렬합니다. * 바에서 (가장 특이한) * 경우에는 개별 구성 요소가 각각의 목록을 정렬해야한다는 것을 확실히 요구해야합니다. –
사용중인 방법 sort 속성을 사용하지만 목록은 정렬되지 않습니다. [9,1]과 [8,2]에 어떻게 적용됩니까? 거기서 실패합니다. 나는 곧 해결책을 게시하려고 노력할 것이다. –
모든 순열을 검토하더라도 로직은 약간 복잡해 보입니다. permutation.index (요소)를 사용하여 위치를 확인하고 순열을 꺼낼 수 있습니다. –