2015-12-12 8 views
-2

мне нужно сцепить списки A и B используя условие, что два списка преобразования в список C, с одной и той же длины, но каждый i элемент не меняет позицию и список сортируется. Иначе вернуть пустой список:Соединить два списка, используя условие

A = ['a', 'b', 'c'] 
B = ['x', 'y', 'z'] 

сцепленных к: C = ['a', 'b', 'z'].

или

A = ['8', '2', '3'] 
B = ['1', '2', '0'] 

сцепленных к: C = ['1', '2', '3'].

Я абсолютно не знаю, как я могу начать решать свою проблему. Какой алгоритм я должен использовать?

UPD:

Еще примеры:

A = ['a', 'b', 'c'] 
B = ['x', 'x', 'x'] 

результатом является: ['a', 'b', 'x']

A = ['b', 'a'] 
B = ['x', 'c'] 

результат должен быть: ['b', 'c'].

И результат конкатенации этих двух списков является пустой список:

A = ['e','a'], 
B = ['f','b'] 
+3

Я не думаю, что вы имеете в виду * конкатенация *. Из ваших примеров вам нужно какое-то слияние. Я также полностью смущен тем, какими правилами вы должны сливаться, основываясь на ваших примерах. Вы упоминаете «сортировку», но я понятия не имею, почему «a, b, c» еще не «отсортирован» достаточно – vmg

+0

Привет, я обновил свои примеры. Да, '['a', 'b', 'c']' и '['x', 'y', 'z']' уже отсортированы, но мне нужно создать новый, также отсортированный, с помощью той же длины, но используя элемент из двух списков. – rel1x

+1

Что должны делать '['e', 'a'], ['f', 'b']' give? –

ответ

0

вам просто нужно переключить последние два элемента в каждом списке ли? Если это так, это простой способ, позволяющий увидеть, что происходит.

lst1 = ['a', 'b', 'c'] 
lst2 = ['x', 'x', 'x'] 

lst3 = lst1 
lst3[len(lst2)-1] = lst2[len(lst2)-1] 

lst3 
Out: ['a', 'b', 'x'] 

Else, объясните логику того, что вы пытаетесь сделать немного больше.

0

Это можно сделать с помощью жадного алгоритма, перебрать оба списка и принять минимальное значение, которое больше, чем предыдущий элемент, который вы сделали.

prev = None 
A = ['a', 'b', 'c'] 
B = ['x', 'x', 'x'] 
n = len(A) 
result = [] 
for i in range(n): 
    mn, mx = A[i],B[i] 
    if mx<mn: 
     mn,mx = mx,mn 
    if prev == None or mn >= prev: 
     prev = mn 
     result.append(prev) 
    elif mx >= prev: 
     prev = mx 
     result.append(prev) 
    else: 
     print "can't be done" 
     break 
if len(result) == n: 
    print result 
+0

Привет! Спасибо за ответ, но у меня есть '['a', 'b', 'c']', когда ожидаемый результат: '['a', 'b', 'x']' – rel1x

+0

Я довольно что ожидаемый результат должен быть '['a', 'b', 'c']', потому что, если нет, то нет простого способа сделать то, что вы хотите, другими словами никакой жадный алгоритм не разрешит это для вас. – Tempux

Смежные вопросы