栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

1.2百万浮点数排序(Python版)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1.2百万浮点数排序(Python版)

一、读文件

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()

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()

data=np.sort(data)

三、写文件

1、write()

write(data): 把数据写入文件

2、Writelines()

writelines(data): 把数据按行写入文件

3、numpy.loadtxt

numpy.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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号