def junta(lstA, lstB): ''' (list, list) -> list Recebe duas listas lstA e lstB com números. Os números de cada lista estão em ordem não-decrescente. A função retorna uma lista contendo todos os números em lstA e em lstB em ordem crescente e sem repetições. Exemplos: >>> junta([2, 5], [1, 2, 2, 3]) [1,2,3,5] >>> junta([-4, -4, 10, 20], [-40, -4, 5, 15, 20]) [-40, -4, 5, 10, 15, 20] >>> junta([], [110]) [110] ''' lst = [] nA = len(lstA) nB = len(lstB) iA = 0 # índice para percorrer lstA iB = 0 # índice para percorrer lstB for i in range(0, nA+nB, 1): if iA == nA: # lstA acabou? if not pertence(lstB[iB], lst): # evita elemento repetido lst += [lstB[iB]] iB += 1 elif iB == nB: # lstB acabou? if not pertence(lstA[iA], lst): # evita elemento repetido lst += [lstA[iA]] iA += 1 elif lstA[iA] <= lstB[iB]: # nenhuma das lista é vazia if not pertence(lstA[iA], lst): # evita elemento repetido lst += [lstA[iA]] iA += 1 else: # lstB[iB] < lstA[iA] if not pertence(lstB[iB], lst): # evita elemento repetido lst += [lstB[iB]] iB += 1 return lst
def junta(lstA, lstB): ''' (list, list) -> list Recebe duas listas lstA e lstB com números. Os números de cada lista estão em ordem não-decrescente. A função retorna uma lista contendo todos os números em lstA e em lstB em ordem crescente e sem repetições. Exemplos: >>> junta([2, 5], [1, 2, 2, 3]) [1,2,3,5] >>> junta([-4, -4, 10, 20], [-40, -4, 5, 15, 20]) [-40, -4, 5, 10, 15, 20] >>> junta([], [110]) [110] ''' lst = [] nA = len(lstA) nB = len(lstB) iA = 0 # índice para percorrer lstA iB = 0 # índice para percorrer lstB while iA < nA and iB < nB: if lstA[iA] <= lstB[iB]: # nenhuma das lista é vazia if not pertence(lstA[iA], lst): # evita elemento repetido lst += [lstA[iA]] iA += 1 else: # lstB[iB] < lstA[iA] if not pertence(lstB[iB], lst): # evita elemento repetido lst += [lstB[iB]] iB += 1 # se lstB acabou, copia o que sobrou em lstA while iA < nA: if not pertence(lstA[iA], lst): # evita elemento repetido lst += [lstA[iA]] iA += 1 # se lstA acabou, copia o que sobrou em lstB while iB < nB: if not pertence(lstB[iB], lst): # evita elemento repetido lst += [lstB[iB]] iB += 1 return lst