有没有办法在python中简化这种"n-way merge"

Tom*_*nks 4 python sorting algorithm mergesort

所以现在我已经硬编码4 if/elif/else语句.有更动态的方法吗?例如,如果我想做10或前夕40路合并?

#4-way merge sort, sorted page files
outfile="fullsorted.txt"
of=open(outfile,"w")
f1=open("temp0-sorted.txt","r")
f2=open("temp1-sorted.txt","r")
f3=open("temp2-sorted.txt","r")
f4=open("temp3-sorted.txt","r")

f1_line=f1.readline()
f2_line=f2.readline()
f3_line=f3.readline()
f4_line=f4.readline()

while len(f1_line)>0 and len(f2_line)>0 and len(f3_line)>0 and len(f4_line)>0:
  if f1_line < f2_line and f1_line < f3_line and f1_line < f4_line and len(f1_line)>0:
    of.write(f1_line)
    f1_line=f1.readline()
  elif f2_line < f3_line and f1_line < f4_line and len(f2_line)>0:
    of.write(f2_line)
    f2_line=f2.readline()
  elif f3_line < f4_line and len(f3_line)>0:
    of.write(f3_line)
    f3_line=f3.readline()
  else:
    of.write(f4_line)
    f4_line=f4.readline()

of.close()
Run Code Online (Sandbox Code Playgroud)

Sha*_*ger 5

只需使用heapq.merge:

import heapq

#4-way merge sort, sorted page files
outfile="fullsorted.txt"

with open("temp0-sorted.txt","r") as f1,\
     open("temp1-sorted.txt","r") as f2,\
     open("temp2-sorted.txt","r") as f3,\
     open("temp3-sorted.txt","r") as f4,\
     open(outfile,"w") as of:
    of.writelines(heapq.merge(f1, f2, f3, f4))
Run Code Online (Sandbox Code Playgroud)