美文网首页
Python高级数据类型

Python高级数据类型

作者: 卡门001 | 来源:发表于2023-05-16 19:53 被阅读0次
  • 命名元组
  • 双端队列
  • 计数器
  • 字典和列表子类化

一、命名元组

定义

  • 完成对命名元组的简单操作
  • Python中提供了基础的不可变数据结构元组tuple,对元组元素的访问需通过索引来完成,对此需要熟记每个下标对应的具体含义。如果元素数量一多,要记清楚这些东西就会比较麻烦了,于是就出现了命名元组namedtuple
  • 可通过collections.namedtuple创建的命名元组(类)

创建命名元组

  • 命名元组的构造函数接受两个参数:typename,field_names:
  • typename:元组的名字;
  • field_names:元组各个元素的名称,也就是属性名称。

例: 以下语句创建了一个叫做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'不'))

计数器

相关文章

  • Python高级数据类型之列表、元组

    上一篇我们简单对Python的基础数据类型做了说明和讲解,本篇我们继续针对Python的数据类型进行高级数据类型的...

  • Python学习笔记1-基础介绍

    Python简介 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python由Guido ...

  • 4、python 教程

    前言 python是什么,为什么学python? 1、Python 是一种解释型、面向对象、动态数据类型的高级程序...

  • Python高级数据类型之字典、集合

    上一篇我们简单对Python的基础数据类型做了说明和讲【Python高级数据类型之列表,元组】,本篇我们继续针对P...

  • 01-Python 入门

    Python简介 Python是一门解释型,面向对象,动态数据类型的高级程序设计语言。 Python特点 易于学习...

  • 分分钟学会Python&tornado(装一下)

    一:python 1.什么是python? python是一种解释性的、面向对象、动态数据类型的高级语言 编译—》...

  • (一)为什么选择Python入门?

    Python语言简介 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python由Guid...

  • python简介及应用实例

    一、python简介 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Guido...

  • Python基础入门

    1、Python简介 Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 Gu...

  • python3介绍和基本语法

    一、了解python python是一种解释型、面向对象、动态数据类型的高级程序设计语言。python程序以.py...

网友评论

      本文标题:Python高级数据类型

      本文链接:https://www.haomeiwen.com/subject/rmvvsdtx.html