xml地图|网站地图|网站标签 [设为首页] [加入收藏]
python利用heapq实现小顶堆,线程基础
分类:编程

查找最大的N个元素——堆数据结构

给出序列,求出TopK大的元素,使用小顶堆,heapq模块实现

使用heappush()时,从数据源增加新元素时会保持元素的堆顺序。
在一个操作中删除现有元素并替换为新值,可以使用heapreplace()
import heapq

class BtmkHeap(object):
    def __init__(self, k):
        self.k = k
        self.data = []

    def Push(self, elem):
        # Reverse elem to convert to max-heap
        num1 = elem[0]
        num1 = -num1
        num2 = elem[1]
        # Using heap algorighem
        if len(self.data) < self.k:
            heapq.heappush(self.data, (num1,num2))
        else:
            topk_small = self.data[0][0]
            if elem[0] > topk_small:
                heapq.heapreplace(self.data,(num1,num2))

    def BtmK(self):
        return sorted([(-x[0],x[1]) for x in self.data])


if __name__ == '__main__':
    a = (100,1)
    b = (200,2)
    c = (300,3)
    d = (400,4)
    e = (50,5)
    btm = BtmkHeap(3)
    btm.Push(a)
    btm.Push(b)
    btm.Push(c)
    btm.Push(e)
    btm.Push((23,1))
    print(btm.BtmK())



结果[(23, 1), (50, 5), (100, 1)]

黄金年代、线程状态

利用xlrd读取excel
筛选0值超过99%的列,并删除

import  xlrd
workbook=xlrd.open_workbook(r"123.xlsx")
table = workbook.sheet_by_name('Sheet1')
nrows=table.nrows
ncols=table.ncols
del_col=[]
for j in range(ncols) :
    sum = 0
    for ai in table.col_values(j):
        if ai == 0.0 :
            sum+=1
    if float(sum)/nrows>=0.99:
        del_col.append(j)
print del_col
利用pandas读取excel
筛选0值超过99%的列,并删除

import pandas as pd
df1=pd.read_csv(r"123.csv")
df=pd.DataFrame(df1)
nrows=df.shape[0]
ncols=df.columns.size
del_col=[]
for j in range(ncols) :
    sum = 0
    for ai in df.iloc[:,j]:
        if ai == 0.0 :
            sum+=1
    if float(sum)/nrows>=0.99:
        del_col.append(j)
print del_col

图片 1

1.新建状态(New卡塔尔(قطر‎:
        当用new操作符创设叁个线程时, 举例new Thread(r卡塔尔国,线程还尚无以前运维,当时线程处在新建状态。 当二个线程处于新生状态时,程序还一直不早先运维线程中的代码
     2.就绪状态(Runnable卡塔尔(英语:State of Qatar)

        叁个新创制的线程并不活动初叶运营,要施行线程,必得调用线程的start(卡塔尔国方法。当线程对象调用start(卡塔尔(英语:State of Qatar)方法即起步了线程,start(卡塔尔(قطر‎方法创设线程运转的系统能源,并调整线程运维run(卡塔尔(英语:State of Qatar)方法。当start(卡塔尔(قطر‎方法再次来到后,线程就处于就绪状态。

        处于就绪状态的线程并不一定立时运营run(卡塔尔(英语:State of Qatar)方法,线程还非得同任何线程竞争CPU时间,唯有获得CPU时间才足以运维线程。因为在单CPU的微型机种类中,不或者同期运营多少个线程,二个整天只有一个线程处于运长势况。因而当时也有两个线程处于就绪状态。对七个处于就绪状态的线程是由Java运维时系统的线程调节程序(thread scheduler卡塔尔国来调整的。
    3.运作景况(Running卡塔尔

        当线程得到CPU时间后,它才步入运行景况,真正开首执行run(卡塔尔国方法.

  1. 堵塞状态(Blocked卡塔尔(英语:State of Qatar)

        线程运营进度中,可能由于各个原因走入拥塞状态:
        1>线程通过调用sleep方法步入眠眠处境;
        2>线程调用四个在I/O上被打断的操作,即该操作在输入输出操作完结早先不会回去到它的调用者;
        3>线程试图拿走三个锁,而该锁正被另外线程持有;
        4>线程在等候某些触发条件;
        ......          
        所谓堵塞状态是正在周转的线程没有运营停止,一时半刻让出CPU,那个时候其余处于就绪状态的线程就能够获取CPU时间,步入运转状态。
    5. 逝世情状(Dead卡塔尔国

        有三个原因会变成线程过逝:
        1卡塔尔国 run方法平常退出而本来长逝,
        2卡塔尔(قطر‎ 多个未捕获的极度终止了run方法而使线程猝死。
        为了鲜明线程在现阶段是或不是存活着(正是要么是可运维的,要么是被打断了),要求利用is阿里ve方法。固然是可运转或被封堵,那么些点子重回true; 即使线程如故是new状态且不是可运维的, 或许线程一病不起了,则赶回false.

本文由澳门新葡亰手机版发布于编程,转载请注明出处:python利用heapq实现小顶堆,线程基础

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文