2017-12-30 51 views
-2

내가 중첩 된 목록을 사용하지 않고 하나의 값에 따라 두 개의 중첩 된 목록을 연결 4 개의 하이픈이 있습니다. 기본적으로 다음과 같은 출력을 기대 : 입력에자리를 같이 보입니다

ar1len = len(ar1)-1 
ar2len = len(ar2)-1 
if(ar1len < ar2len): 
    for i in range(0, ar1len): 
     if ar1[i][0] == ar2[i][0]: 
      ar1[i] = ar1[i] + ar2[i][1:] 
    for i in range(ar2len,(1 + ar1len)): 
      ar1[i] = ar1[i] + ar2[i] 
else: 
    for i in range(0, ar2len): 
     if ar1[i][0] == ar2[i][0]: 
      ar1[i] = ar1[i] + ar2[i][1:] 

이제 하이픈 값 : 하이픈

liop = [ 
    [ 
     '---- a ----', 
     'p', 
     'q', 
     'i', 
     'j' 
    ], 
    [ 
     '---- b ----', 
     'm', 
     'n', 
     'r', 
     's' 
    ] 
    ] 

이전 값이 첫 번째 값을 나에게 다음과 같이 스크립트를 작성 한 모든 시간을로 사용 목록이 다른 위치에오고 있으며이 스 니펫이 작동하지 않습니다. 이 문제를 해결할 수있는 지침이 있으면 크게 감사하겠습니다.

답변

1

예상 결과가 과 s으로 바뀝니다. 그래서 나는 정렬을 사용할 것이다.

중복에 대해서는 언급하지 않으므로 정렬 된 집합이 괜찮을 수도 있습니다.

liop = [sorted(set(*[ar1[0] + ar2[0]])), sorted(set(*[ar1[1] + ar2[1]]))] 

set의 동작을 원하지 않고 append 및 가능한 정렬을 사용하지 않으려면이 작업이 정상적으로 수행 될 수 있습니다. merge()

liop = [[''], ['']] 

def merge(lst, index, sort_lst=False): 
    for item in lst[index]: 
     if item.startswith('----'): 
      liop[index][0] = item 
     else: 
      liop[index].append(item) 
    if sort_lst: 
     liop[index].sort() 

for index in range(2): 
    merge(ar1, index, True) 
    merge(ar2, index, True) 

제 3 인수

다른 False로 설정할 수 있습니다, 정렬 할 True입니다.

위의 분류 수익률의 두 :

[['---- a ----', 'i', 'j', 'p', 'q'], ['---- b ----', 'm', 'n', 'r', 's']] 
+1

'항목 [4] =='---- ''더 견고'로 기록 될 수 있습니다 item.startswith ('----') 그러면 대상 기준이 변경되면 작업 할 슬라이싱을 업데이트 할 필요가 없습니다. 슬라이스 생성을 피할 수 있습니다. –

+0

@Jon Clements, 답변 편집에 사용 된 조언. 감사. –