Python高级数据类型

2023-05-16  本文已影响0人  卡门001

一、命名元组

定义

创建命名元组

例: 以下语句创建了一个叫做Point的命名元组类,它拥有两个属性x,y。

collections.namedtuple("Point",["x","y"])

#----或以下写法也是可以的---
collections.namedtuple("Point","x y")
collections.namedtuple("Point","x,y")

将命名元组赋给一个变量

MyPoint = collections.namedtuple("Point","x,y")

新建的元组变量,它只是一个类,如果要创建它的实例,则需要像创建类实例一样调用它:

MyPoint = collections.namedtuple("Point", "x,y")
p1 = MyPoint(x=1, y=2)
# x元素,下标0, y元素,下标1
print(p1.x,p1.y)
print(p1[0],p1[1])

修改元素

修改元组的元素不能简单的使用p1.x = 1,需要调用成员函数 _replace(),它会返回一个包含新值的新实例。

p1 = p1._replace(x = 1) #将p1的x值从0换到1

二、双端队例

双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的线性数据结构。双端队列也拥有两端:队首(front)、队尾(rear),但与队列不同的是,插入操作在两端(队首和队尾)都可以进行,删除操作也一样。

标准库collections.deque

from collections import deque
class Deque:
    def __init__(self):
        self.items = deque()
    def addFront(self, item):
        self.items.appendleft(item)
    def addRear(self, item):
        self.items.append(item)
    def removeFront(self):
        return self.items.popleft()
    def removeRear(self):
        return self.items.pop()
    def empty(self):
        return self.size() == 0
    def size(self):
        return len(self.items)

应用 - 回文算法

算法:回文(palindrome)是正读反读都一样的单词或句子,是一种修辞方式和文字游戏。
举例:

madam
able was i ere i saw elba
# 中文
花非花
人人为我、我为人人

如果要实现一个 回文验证算法(验证一个给定的字符串是否为回文),使用Deque类将非常容易:将字符串存储到双端队列,同时取出首尾字符并比较是否相等,只要有一对字符不等,则该字符串不是回文;若全部相等,则该字符串为回文。具体代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
def palchecker(aString):
    chardeque = Deque()
    for ch in aString:
        chardeque.insert(ch)
    while chardeque.size() > 1:
        first = chardeque.popFront()
        last = chardeque.pop()
        if first != last:
            return False
    return True


if __name__ == '__main__':
    str1 = 'able was i ere i saw elba'
    print('"%s" is%s palindrome' % (str1, '' if palchecker(str1) else ' not'))
    str2 = u'人人为我、我为人人'
    print(u'"%s"%s是回文' % (str2, u'' if palchecker(str2) else u'不'))
    str3 = u"What's wrong 怎么啦"
    print(u'"%s"%s是回文' % (str3, u'' if palchecker(str3) else u'不'))

计数器

上一篇下一篇

猜你喜欢

热点阅读