Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何合并两个已排序的列表?_Python_List - Fatal编程技术网

Python 如何合并两个已排序的列表?

Python 如何合并两个已排序的列表?,python,list,Python,List,我应该写一个代码来合并排序列表,我在第二个函数中得到一个错误,它说: TypeError: object of type 'NoneType' has no len() 我的代码是: def merge(lst1, lst2): """ merging two ordered lists using the three pointer algorithm """ n1 = len(lst1) n2 = len(lst2) lst3 = [0 fo

我应该写一个代码来合并排序列表,我在第二个函数中得到一个错误,它说:

TypeError: object of type 'NoneType' has no len()
我的代码是:

def merge(lst1, lst2):
    """ merging two ordered lists using
        the three pointer algorithm """
    n1 = len(lst1)
    n2 = len(lst2)
    lst3 = [0 for i in range(n1 + n2)]  # alocates a new list
    i = j = k = 0  # simultaneous assignment

    while (i < n1 and j < n2):
        if (lst1[i] <= lst2[j]):
            lst3[k] = lst1[i]
            i = i +1
        else:
            lst3[k] = lst2[j]
            j = j + 1
        k = k + 1  # incremented at each iteration
    lst3[k:] = lst1[i:] + lst2[j:]  # append remaining elements

def multi_merge_v3(lst_of_lsts):
     m = len(lst_of_lsts)
     merged = []
     for i in range(m):
          merged= merge((merged),(lst_of_lsts)[i])
     return(merged)
def合并(lst1,lst2):
“”“使用合并两个有序列表”
三指针算法
n1=len(lst1)
n2=len(lst2)
lst3=[0表示范围内的i(n1+n2)]#表示一个新列表
i=j=k=0#同时赋值
而(i如果(lst1[i]您没有从函数
merge()
返回任何内容,那么默认情况下,它不会返回分配给
merged
的任何内容。因此,在第二次调用
merge()
期间,您将执行
len(None)

因此,在该函数的末尾:

return lst3
merged = sorted(lst1 + lst2)

下面是关于排序列表合并问题的简单说明

l1 = [1,12,15,26,38]
l2 = [2,13,17,30,45,50]

# merged list
ml= [0]*(len(l1)+len(l2))


i1 = i2 = 0
for i in range(len(l1)+len(l2)): 
    if i1 == len(l1): 
        ml = ml[:i] + l2[i2:] 
        break
    if i2 == len(l2):
        ml = ml[:i] + l1[i1:]
        break       

    if l1[i1] < l2[i2]:
        ml[i] = l1[i1]
        i1 = i1 + 1
    else:
        ml[i] = l2[i2]
        i2 = i2 + 1 

print ml
l1=[1,12,15,26,38]
l2=[2,13,17,30,45,50]
#合并列表
ml=[0]*(len(l1)+len(l2))
i1=i2=0
对于范围内的i(len(l1)+len(l2)):
如果i1==len(l1):
ml=ml[:i]+l2[i2:]
打破
如果i2==len(l2):
ml=ml[:i]+l1[i1:]
打破
如果l1[i1]
这里有一个选项:依赖Python内置的
排序功能:

return lst3
merged = sorted(lst1 + lst2)

下面是另一个答案:使用“合并”功能:

这是非常有效的,因为merge期望
lst1
lst2
已经被排序,所以它只在运行时查看第一个元素

请注意,
merge
还允许多个(已排序)参数:

merged = heapq.merge(lst1, lst2, lst3, lst4)
此时,
merged
实际上本身就是一个迭代器。要获取实际列表,请使用:

merged = list(heapq.merge(lst1, lst2))

请记住:使用Python时,“包括电池”。

请将您的问题包括完整的回溯,以及调用
multi_merge_v3()的行
如何调用
multi\u merge\u v3
呢?因为如果在该函数中出现异常,那么
lst\u/lsts
就是
None
。你不能将列表合并,然后重新排序吗?如果列表不是很大,那就行了。@BurhanKhalid:tsk-tsk,忽略家庭作业吗?不,你可以使用
heapq.merge()。