实例详解Python元组

本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于元组的相关问题,包括了元组的创建、访问、修改、删除和内置方法等,希望对大家有帮助。

实例详解Python元组

推荐学习:python教程

引言——在Python中,通过数据结构来保存项目中重要的数据信息。Python语言内置了多种数据结构,例如列表,元组,字典和集合等。本堂课我们来讲一讲Python中举足轻重的一大数据结构——元组。

在Python中,我们可以将元组看作一种特殊的列表。它与列表唯一的不同在于:元组内的数据元素不能发生改变【这个不变——不但不能改变其中的数据项,而且也不能添加和删除数据项!】。当我们需要创建一组不可改变的数据时,通常是将这些数据放进元组中~

立即学习“Python免费学习笔记(深入)”;

1.元组的 创建 && 访问

(1)元组的创建:

在Python中,创建元组的基本形式是以小括号“()”将数据元素括起来,各个元素之间用逗号“,”隔开。 如下:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)tuple2 = (1, 2, 3, 4, 5)# 而且——是可以创建空元组哦!tuple3 = ()# 小注意——如果你创建的元组只包含一个元素时,也不要忘记在元素后面加上逗号。让其识别为一个元组:tuple4 = (22, )

登录后复制

(2)访问:

元组和字符串以及列表类似,索引都是从0开始,并且可以进行截取和组合等操作。
如下:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)tuple2 = (1, 2, 3, 4, 5)# 显示元组中索引为1的元素的值print("tuple1[1]:", tuple1[0])# 显示元组中索引从1到3的元素的值print("tuple2[1:3]:", tuple2[1:3])

登录后复制

在这里插入图片描述

2.元组的 修改 && 删除

(1)元组的修改:

虽然在开头就说元组不可变,但是它还是有个被支持的骚操作——元组之间进行连接组合:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)tuple2 = (1, 2, 3, 4, 5)tuple_new = tuple1 + tuple2print(tuple_new)

登录后复制

在这里插入图片描述

(1)元组的删除:

虽然元组不可变,但是却可以通过del语句删除整个元组。
如下:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)print(tuple1)# 正常打印tuple1del tuple1print(tuple1)# 因为上面删除了tuple1,所以再打印会报错哦!

登录后复制

在这里插入图片描述

3.元组的内置方法

元组是不可变,但是我们可以通过使用内置方法来操作元组。常用的内置方法如下:

len(tuple):计算元组元素个数;max(tuple):返回元组中元素的最大值;min(tuple):返回元组中元素的最小值;tuple(seq):将列表转换为元组。

其实更多时候,我们是将元组先转换为列表,操作之后再转换为元组(因为列表具有很多方法~)。

4.将序列分解为单独的变量

(1)

Python允许将一个包含N个元素的元组或序列分别为N个单独的变量。这是因为Python语法允许任何序列/可迭代对象通过简单的赋值操作分解为单独的变量,唯一的要求是变量的总数和结构要与序列相吻合。
如下:

tuple1 = (18, 22)x, y = tuple1print(x)print(y)tuple2 = ['xiaoming', 33, 19.8, (2012, 1, 11)]name, age, level, date = tuple2print(name)print(date)

登录后复制

在这里插入图片描述

如果要分解未知或任意长度的可迭代对象,上述分解操作岂不直接很nice!通常在这类可迭代对象中会有一些已知的组件或模式(例如:元素1之后的所有内容都是电话号码),利用“*”星号表达式分解可迭代对象后,使得开发者能轻松利用这些模式,而无须在可迭代对象中做复杂操作就能得到相关的元素。

在Python中,星号表达式在迭代一个变长的元组序列时十分有用。如下演示分解一个待标记元组序列的过程。

records = [    ('AAA', 1, 2),    ('BBB', 'hello'),    ('CCC', 5, 3)]def do_foo(x, y):    print('AAA', x, y)def do_bar(s):    print('BBB', s)for tag, *args in records:    if tag == 'AAA':        do_foo(*args)    elif tag == 'BBB':        do_bar(*args)line = 'guan:ijing234://wef:678d:guan'uname, *fields, homedir, sh = line.split(':')print(uname)print(*fields)print(homedir)print(sh)

登录后复制

在这里插入图片描述

(2)

在Python中迭代处理列表或元组等序列时,有时需要统计最后几项记录以实现历史记录统计功能。

使用内置的deque实现:

from _collections import dequeq = deque(maxlen=3)q.append(1)q.append(2)q.append(3)print(q)q.append(4)print(q)

登录后复制

在这里插入图片描述

如下——演示了将序列中的最后几项作为历史记录的过程。

from _collections import dequedef search(lines, pattern, history=5):    previous_lines = deque(maxlen=history)    for line in lines:        if pattern in line:            yield line, previous_lines        previous_lines.append(line)# Example use on a fileif __name__ == '__main__':    with open('123.txt') as f:        for line, prevlines in search(f, 'python', 5):            for pline in prevlines:# 包含python的行                print(pline)  # print (pline, end='')            # 打印最后检查过的N行文本            print(line)  # print (pline, end='')

登录后复制

123.txt:

pythonpythonpythonpythonpythonpythonpythonpythonpython

登录后复制

在这里插入图片描述

在上述代码中,对一系列文本行实现了简单的文本匹配操作,当发现有合适的匹配时,就输出当前的匹配行以及最后检查过的N行文本。使用deque(maxlen=N)创建了一个固定长度的队列。当有新记录加入而使得队列变成已满状态时,会自动移除最老的那条记录。当编写搜索某项记录的代码时,通常会用到含有yield关键字的生成器函数,它能够将处理搜索过程的代码和使用搜索结果的代码成功解耦开来。

5.实现优先级队列

使用内置模块heapq可以实现一个简单的优先级队列。
如下——演示了实现一个简单的优先级队列的过程。

import heapqclass 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('AAA'), 1)q.push(Item('BBB'), 4)q.push(Item('CCC'), 5)q.push(Item('DDD'), 1)print(q.pop())print(q.pop())print(q.pop())

登录后复制

在上述代码中,利用heapq模块实现了一个简单的优先级队列,第一次执行pop()操作时返回的元素具有最高的优先级。
拥有相同优先级的两个元素(foo和grok)返回的顺序,同插入到队列时的顺序相同。

函数heapq.heappush()和heapq.heappop()分别实现了列表_queue中元素的插入和移除操作,并且保证列表中的第一个元素的优先级最低。

函数heappop()总是返回“最小”的元素,并且因为push和pop操作的复杂度都是O(log2N),其中N代表堆中元素的数量,因此就算N的值很大,这些操作的效率也非常高。

上述代码中的队列以元组 (-priority, index, item)的形式组成,priority取负值是为了让队列能够按元素的优先级从高到底排列。这和正常的堆排列顺序相反,一般情况下,堆是按从小到大的顺序进行排序的。变量index的作用是将具有相同优先级的元素以适当的顺序排列,通过维护一个不断递增的索引,元素将以它们加入队列时的顺序排列。但是当index在对具有相同优先级的元素间进行比较操作,同样扮演一个重要的角色。

在Python中,如果以元组(priority, item)的形式存储元素,只要它们的优先级不同,它们就可以进行比较。但是如果两个元组的优先级相同,在进行比较操作时会失败。这时可以考虑引入一个额外的索引值,以(priority, index, item)的方式建立元组,因为没有哪两个元组会有相同的index值,所以这样就可以完全避免上述问题。一旦比较操作的结果可以确定,Python就不会再去比较剩下的元组元素了。

如下——演示了实现一个简单的优先级队列的过程:

import heapqclass 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)# ①a = Item('AAA')     b = Item('BBB')#a < b  错误a = (1, Item('AAA'))b = (5, Item('BBB'))print(a < b)c = (1, Item('CCC'))#② a < c 错误# ③a = (1, 0, Item('AAA'))b = (5, 1, Item('BBB'))c = (1, 2, Item('CCC'))print(a < b)# ④print(a < c)

登录后复制

在这里插入图片描述

在上述代码中,因为在1-2中没有添加所以,所以当两个元组的优先级相同时会出错;而在3-4中添加了索引,这样就不会出错了!

推荐学习:python学习教程

以上就是实例详解Python元组的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2245149.html

(0)
上一篇 2025年2月26日 21:44:02
下一篇 2025年2月23日 15:40:24

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 实例详解python之requests模块

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了requests模块的相关问题,requests模块是一个用于网络请求的模块,主要用来模拟浏览器发请求,希望对大家有帮助。 推荐学习:python学习教程 Requests模块是…

    2025年2月26日
    200
  • 归纳总结Python常用模块大全

    本篇文章给大家带来关于python的相关知识,其中主要给大家整理了一些常用的模块使用总结,包括了时间模块、os模块、sys模块、shelve模块等等,希望对大家有帮助。 推荐学习:python教程 一、时间模块time() 与 dateti…

    2025年2月26日 编程技术
    200
  • Python基础学习之标准库sys总结

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了标准库sys的相关问题,python的sys模块提供访问由解释器使用或维护的变量的接口,并提供了一些函数用来和解释器进行交互,操控python的运行时环境,希望对大家有帮助。 推…

    2025年2月26日
    200
  • 深入了解Python数据处理及可视化

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于数据处理以及可视化的相关问题,包括了numpy的初步使用、matplotlib包的使用和数据统计的可视化展示等等,希望对大家有帮助。 推荐学习:python教程 一、NumP…

    2025年2月26日 编程技术
    200
  • 详细解析Python之关键字

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于关键字的相关问题,根据实例详细解析python的的关键字知识点,希望对大家有帮助。 推荐学习:python详细教程 1 and、or、not and、or、not关键字都是逻…

    2025年2月26日 编程技术
    200
  • 一起聊聊Python的编码样式

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了python的基本编码规范,包括声明编码格式、缩进规则、注释部分和空行使用等等,希望对大家有帮助。 推荐学习:python教程 Python编码规范 编码规范 在各种编程语言中都…

    2025年2月26日
    200
  • 简单介绍一下Python(图文详解)

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了包括程序运行机制和python语言的诞生与发展史等相关问题,希望对大家有帮助。 推荐学习:python学习教程 一、计算机组成   计算机已经成为我们这个时代的核心设备,我们无时…

    2025年2月26日 编程技术
    200
  • Python使用丝般顺滑的经典技巧总结

    本篇文章给大家带来了关于python的相关知识,其中主要总结介绍了一些提升python使用性能的小技巧,包括了使用map进行函数映射、使用set求交集等等,希望对大家有帮助。 推荐学习:python学习教程 如何测量程序的执行时间 关于 P…

    2025年2月26日
    200
  • 带你搞懂Python反序列化

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于反序列化的相关问题,反序列化:pickle.loads() 将字符串反序列化为对象、pickle.load() 从文件中读取数据反序列化,希望对大家有帮助。 推荐学习:pyt…

    2025年2月26日
    100
  • 归纳整理python正则表达式解析

    本篇文章给大家带来了关于python的相关知识,其中主要介绍了python正则表达式的相关问题,总结了包括正则表达式函数、元字符、特殊序列、集合套装、匹配对象等等,希望对大家有帮助。 推荐学习:python教程 正则表达式的作用是什么?我们…

    2025年2月26日 编程技术
    200

发表回复

登录后才能评论