1、用迭代器循环访问文件中的每一行
f=open('M1.txt', 'r')
data=[float(line) for line in iter(f)]
2、np.loadtxt()
f=open('M1.txt', 'r')
data = np.loadtxt("M1.txt")
3、直接访问文件中的数据
f=open('M1.txt', 'r')
data=[float(line) for line in f]
4、readlines()
f=open('M1.txt', 'r')
a=f.readlines()
data=[float(line) for line in a]
二、排序
1、sort()
f=open('M1.txt', 'r')
data = np.loadtxt("M1.txt")
3、直接访问文件中的数据
f=open('M1.txt', 'r')
data=[float(line) for line in f]
4、readlines()
f=open('M1.txt', 'r')
a=f.readlines()
data=[float(line) for line in a]
二、排序
1、sort()
f=open('M1.txt', 'r')
a=f.readlines()
data=[float(line) for line in a]
二、排序
1、sort()
list.sort(key=None, reverse=False)
key :设置排序方法,或指定list中用于排序的元素;
reverse :升降序排列,默认为升序排列;
sort()是列表内置的方法,没有返回值,是将列表排序,列表变化了
2、Sorted()
sorted(data [, key[, reverse]])
key :设置排序方法,或指定迭代对象中,用于排序的元素;
reverse :升降序排列,默认为升序排列;
Sorted()是全局内置的方法,有返回值,返回对可迭代序列排序后的新对象,但是原来的序列不变
3、快速排序
def quick_sort(lst):
"""快速排序"""
def partition(lst, left, right):
#计算中间索引
mid = (left+right)//2
#将三个元素中大小居中的元素交换至列表的最左侧
if lst[left]>lst[mid]:
lst[left], lst[mid] = lst[mid], lst[left]
if lst[mid]>lst[right]:
lst[mid], lst[right] = lst[right], lst[mid]
if lst[left]=pivot_value:
right-=1
lst[left] = lst[right]
while left=right:
return
pivot_key = partition(lst, left, right)
q_sort(lst, left, pivot_key-1)
q_sort(lst, pivot_key+1, right)
#取某个常数,待排序元素数量大于该常数时使用快排,否则使用插入排序
if len(lst)>50:
q_sort(lst, 0, len(lst)-1)
else:
insert_sort(lst)
return lst
4、堆排序
def heap_sort(elems):
def siftdown(elems, e, begin, end): #向下筛选
i, j = begin, begin*2+1 #j为i的左子结点
while j < end:
if j+1 < end and elems[j] > elems[j+1]: #如果左子结点大于右子结点
j += 1 #则将j指向右子结点
if e < elems[j]: #j已经指向两个子结点中较小的位置,
break #如果插入元素e小于j位置的值,则为3者中最小的
elems[i] = elems[j]
i, j = j, j*2+1
elems[i] = e
end = len(elems)
for i in range(end//2-1, -1, -1): #构造堆序。
siftdown(elems, elems[i], i, end)
for i in range ((end-1), 0,-1): #进行堆排序.i最后一个值为1,不需要到0
e = elems[i] #将末尾元素赋给e
elems[i] = elems[0] #交换堆顶与最后一个元素
siftdown(elems, e, 0, i)
return(elems)
5、np.sort()
def heap_sort(elems):
def siftdown(elems, e, begin, end): #向下筛选
i, j = begin, begin*2+1 #j为i的左子结点
while j < end:
if j+1 < end and elems[j] > elems[j+1]: #如果左子结点大于右子结点
j += 1 #则将j指向右子结点
if e < elems[j]: #j已经指向两个子结点中较小的位置,
break #如果插入元素e小于j位置的值,则为3者中最小的
elems[i] = elems[j]
i, j = j, j*2+1
elems[i] = e
end = len(elems)
for i in range(end//2-1, -1, -1): #构造堆序。
siftdown(elems, elems[i], i, end)
for i in range ((end-1), 0,-1): #进行堆排序.i最后一个值为1,不需要到0
e = elems[i] #将末尾元素赋给e
elems[i] = elems[0] #交换堆顶与最后一个元素
siftdown(elems, e, 0, i)
return(elems)
5、np.sort()
data=np.sort(data)
三、写文件1、write()
write(data): 把数据写入文件
2、Writelines()
writelines(data): 把数据按行写入文件
3、numpy.loadtxtnumpy.loadtxt(fname, dtype=, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
四、所有代码import pandas as pd
def eformat(f,prec,exp_digits):
s = "%.*e"%(prec, f)
mantissa, exp = s.split('e')
return "%se%+0*d"%(mantissa, exp_digits+1, int(exp))
def textsave(filename, data):
f=open(filename, 'w')
for i in range(len(data)):
cc=eformat(data[i],9,3)
if float(cc)>0:
f.write('+'+cc+'n')
# f.writelines('+'+cc+'n')
else:
f.write(cc+'n')#4.867782299999817 Seconds
#f.writelines(cc+'n')
f.close()
if __name__=='__main__':
f=open('M1.txt', 'r')
data=[float(line) for line in f]#1、生成器
data.sort()# 0.09813759999815375 Seconds
textsave('W2.txt', data)#13.028360700000121 Secondswriteline


