Python 将三个列表合并在一起
为了好玩,我尝试实现k路合并排序,其中k=3。我在递归调用mergesort时没有遇到问题,但我正在尝试将三个列表合并在一起,但没有得到排序列表。基本思想是比较每个列表的第一个元素,如果它是最小的,则将其附加到列表中。我对所有阵列重复此过程Python 将三个列表合并在一起,python,merge,Python,Merge,为了好玩,我尝试实现k路合并排序,其中k=3。我在递归调用mergesort时没有遇到问题,但我正在尝试将三个列表合并在一起,但没有得到排序列表。基本思想是比较每个列表的第一个元素,如果它是最小的,则将其附加到列表中。我对所有阵列重复此过程 def three_merge(a,b,c): i =0 j =0 k=0 list = [] while(i < len(a) or j < len(b) or k < len(c)):
def three_merge(a,b,c):
i =0
j =0
k=0
list = []
while(i < len(a) or j < len(b) or k < len(c)):
while(a[i] <= b[j] and a[i] <= c[k]):
list.append(a[i])
i=i+1
print i
while(b[j] <= a[i] and b[j] <= c[k]):
list.append(b[j])
j=j+1
print j
while(c[k] <= a[i] and c[k] <= b[j]):
list.append(c[k])
k=k+1
print k
return list
a = [1,2]
b = [-5,10]
c = [-11, 100]
print three_merge(a,b,c)
定义三个合并(a、b、c):
i=0
j=0
k=0
列表=[]
而(ii、j、k
,这意味着从列表中获取所有元素后,索引比相应输入列表的长度大一个。因此,当您比较不同输入列表的元素值时,最终会遇到一个点你试图做的,实际上,<代码> A[LeN(a)] < /C>,同时总是给出索引错误。 为什么不考虑将三个列表合并为两个列表的两个合并项
def merge(a,b):
L = a
l = b
i = 0
j = 0
res = []
if (len(b)>len(a)):
L=b
l=a
#print L
#print l
while (i<len(L)):
if(len(l)>0):
while (j<len(l)):
if (L[i]<=l[j]):
res.append(L[i])
del L[i]
break
else:
res.append(l[j])
del l[j]
else:
#print res
res = list(res+L)
L=[]
break
if len(l)>0:
res = list(res+l)
l=[]
return res
def threeMerge(a,b,c):
return merge(merge(a,b),c)
aa = [1,2]
bb = [-5,3,20]
cc= [-11, 23,45]
print threeMerge(aa,bb,cc)
def合并(a,b):
L=a
l=b
i=0
j=0
res=[]
如果(len(b)>len(a)):
L=b
l=a
#打印L
#打印l
而(i0):
而(j这里有一个简单的n向合并函数。如果您有问题,请随时提问:
def merge(*args):
lst = list(args)
idx = [0] * len(lst)
out = []
while lst:
m = 0
for i in range(len(lst)):
if lst[i][idx[i]] < lst[m][idx[m]]:
m = i
out.append(lst[m][idx[m]])
idx[m] += 1
if idx[m] >= len(lst[m]):
del lst[m]
del idx[m]
return out
print merge([1,2,11], [2,9], [8]) # [1, 2, 2, 8, 9, 11]
def合并(*args):
lst=列表(args)
idx=[0]*len(lst)
out=[]
而lst:
m=0
对于范围内的i(len(lst)):
如果lst[i][idx[i]=len(lst[m]):
del lst[m]
del idx[m]
返回
打印合并([1,2,11],[2,9],[8])#[1,2,2,8,9,11]
您知道,这可能有一个一/两行程序。排序(a+b+c)
我想到了。返回列表应该在while循环中还是在它之后?我试图不使用内置函数为什么?这是家庭作业还是什么,或者你只是想让它变得困难?合并一个类似python的数组,你更喜欢这样做;list1+list2
你应该编辑你的问题,以更具体地说明是什么在发生时,不要只是说你没有得到一个排序的列表。对我现有的代码进行更改会很乏味。我可能会从头重写,因为有了这段代码,我会有一堆if语句。@phil12是的,所以?你当前的设计不起作用,所以需要进行更改。如果它变得难看,可能会有不同的方法h更好。