zoukankan      html  css  js  c++  java
  • cookbook学习第二弹

    1.5怎样实现一个按优先级排序的队列?并且在这个队列上面每次pop操作总是返回优先级最高的那个元素

    带有双下划线的方法,会在需要被调用的位置自动被调用

    带有单下划线的变量是私有变量

     下面利用类heapq模块实现一个简单的优先级队列:

    import heapq

    class PriorityQUeue:

      def __init__(self):

        self._queue = []

        self._index = 0

      def push(self,item,priority):

        heapq.heappush(self._queue,(-priority,self._index,item))

        self._index +=1

      def pop(self):

        return heapq.heappop(self._queue)[-1]

    下面是它的使用方式:

    class Item:

      def __init__(self,name):

        self.name = name

      def __repr__(self):

        return 'Item({!r})'.format(self.name)

    >>>q = PriorityQueue()

    >>>q.push(Item('foo'),1)

    >>>q.push(Item('bar'),5)

    >>>q.push(Item('spam'),4)

    >>>q.push(Item('grok'),1)

    >>>q.pop()

    Item('bar')

    >>> q.pop()
    Item('spam')
    >>> q.pop()
    Item('foo')
    >>> q.pop()
    Item('grok')

    仔细观察可以发现,第一个 pop() 操作返回优先级最高的元素。 另外注意到如果两个有
    着相同优先级的元素( foo 和 grok ),pop操作按照它们被插入到队列的顺序返回的

    __repr__()函数的作用

    str()一般是将数值转成字符串。 
    repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。 

     

    Python中这个_repr_函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串:

    1. 尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象 ;

    2. 否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) ;

    3. 一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。

    代码例子如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> class D(object):
    ...     def __str__(self):
    ...         return "a __str__"
    ...     def __repr__(self):
    ...         return "a __repr__"
    ...
    >>> dr = D()
    >>> print dr
    a __str__
    >>> dr
    a __repr__
    >>> "%s" % dr
    'a __str__'
    >>> "%r" % dr
    'a __repr__'
  • 相关阅读:
    高斯消元(模板及bitset优化异或方程)
    dsu on tree
    拉格朗日插值
    [CF] CF900D Unusual Sequences
    【模板】Polya 定理
    Min-25筛学习笔记
    [CF] CF156C Cipher
    基于 Flink + Kafka 的广告实时数据分析建设与实践
    开源中国【面经】Java后台开发
    spring boot中连接数据库报错500(mybatis)
  • 原文地址:https://www.cnblogs.com/yingqml/p/6180268.html
Copyright © 2011-2022 走看看