我需要使用两个列表转换为列表A
的条件来连接列表B
和C
,并且长度相同,但每个i
元素都没有t更改位置和列表已排序。否则返回空列表:
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']
答案 0 :(得分:0)
您只需要切换每个列表中的最后两个元素吗?如果是这样,这是一种让您了解正在发生的事情的简单方法。
lst1 = ['a', 'b', 'c']
lst2 = ['x', 'x', 'x']
lst3 = lst1
lst3[len(lst2)-1] = lst2[len(lst2)-1]
lst3
Out: ['a', 'b', 'x']
否则,请解释您尝试再做一些事情背后的逻辑。
答案 1 :(得分: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