美文网首页
Python 内置数据结构之二(元组)

Python 内置数据结构之二(元组)

作者: Alexander_Zz | 来源:发表于2019-08-14 15:29 被阅读0次

一、元组 tuple

1.1 一个有序的元素组成的集合
1.2 使用小括号 () 表示
  • 示例
t1 = tuple()
t2 = ()
t3 = (1,)   # 不可写成 t3 = (1) 
t4 = (1,'a',range(1))
1.3 元组是 不可变 对象
  • 示例
t5 = (1,[2,3],(4,5))
t5[1] = 3
t5[1][0] = 3
t5[2][0] = 3
不可变示例 1 .png
不可变示例 2 .png

二、元组的定义 初始化

2.1 定义
  • tuple() -> empty tuple
  • tuple(iterable) -> tuple initialized from iterable's items
  • 示例
t = tuple()   # 工厂方法
t = ()
t = tuple(range(1,7,2))   # iterable 可迭代对象
t = (2,4,6,3,4,2,)
t = (1,)   # 一个元素元组的定义,注意有个逗号
t = (1,)*5
t = (1,2,3) * 5
示例.png

三、元组元素的访问

3.1 支持索引(下标)
  • 正索引
    a) 从左至右,从 0 开始,为列表中每个元素编号
    b) 示例
t1 = (range(5))
t1[2]
示例.png
  • 负索引
    a) 从右至左,从 -1 开始
    b) 示例
t1 = (range(5))
t1[-1]
示例.png
  • 正负索引不可超界,否则引发异常 IndexError


    IndexError.png

四、元组查询

4.1 index(value,[start,[stop]])
  • 通过值 value ,从指定区间查找元组内的元素是否匹配
  • 匹配第一个就立即返回索引
  • 匹配不到,抛出异常 ValueError
4.2 count(value)
  • 返回元组中匹配 value 的次数
4.3 时间复杂度
  • index 和 count 方法都是 O(n)
  • 随着元组数据规模的增大,而效率下降
4.4 len(tuple)
  • 返回元素个数

五、元组的其他操作

5.1 元组是只读的,所以 增、删、改 方法都没有

六、命名元组 namedtuple

6.1 namedtuple(typename,field_names,verbose=False,rename=False)
  • 命名元组,返回一个元组的子类,并定义了字段
  • field_names 可以是空白符或都好分割的字符串,可以是字段的列表
6.2 示例
from collections import namedtuple

Student = namedtuple('Student','name age')   # Student 为返回的类,括号中的 Student 为显示名称
tom = Student('tom',20)
jerry = Student('jerry',21)
示例.png

七、冒泡法

7.1 冒泡法
  • 属于交换排序
  • 两两比较大小,交换位置。如同水泡咕嘟咕嘟网上冒
  • 结果分为升序和降序排列
7.2 升序
  • n 个数从左至右,编号从 0 开始到 n-1,索引 0 和 1 的值比较,如果索引 0 大,则交换两者位置,如果索引 1 大,则不交换。继续比较索引 1 和 2 的值,将大值放在右侧。直至 n-2 和 n-1 比较完,第一轮比较完成。第二轮从索引 0 比较到 n-2,因为最右侧 n-1 位置上已经是最大值了。依次类推,没一轮都会减少最右侧的不参与比较,直至剩下最后 2 个数比较
7.3 降序
  • 和升序相反
冒泡法图示.png
7.4 示例
nums = [1,9,8,5,6,7,4,3,2]
length = len(nums)

for i in range(length -1):
    for j in range(length -1 -i):
        if nums[j] > nums[j+1]:
            temp = nums[j]
            nums[j] = nums[j+1]
            nums[j+1] = temp

print (nums)
基础.png 优化.png
7.5 冒泡法总结
  • 冒泡法需要数据一轮轮比较
  • 可以设定一个标记判断此轮是否有数据交换发生,若无交换发生,则可结束排序,反之进行下一轮排序
  • 最差的排序情况是,初始顺序与目标顺序完全相反,遍历次数 1,2,...,n-1 之和 n(n-1)/2
  • 最好的排序情况是,初始顺序与目标顺序完全相同,遍历次数 n-1
  • 时间复杂度 O(n^2)

八、练习

8.1 依次接收用户输入的 3 个数,排序后打印
  • 转换 int 后,判断大小排序,使用分支结构完成
  • 使用 max 函数
  • 使用列表的 sort 方法
# 练习一
nums = []

for i in range(3):
    nums.append(int(input('No {} >>>'.format(i))))   # input('>>>')
    
targets = []

if nums[0] > nums[1]:
    if nums[1] > nums[2]:
        pass
    else:                                            # nums[2] >= nums[1]
        if nums[0] > nums[2]:
            nums = [nums[0],nums[2],nums[1]]
#             targets = [0,2,1]                      # 记录索引方式,两种方式任选其一
        else:                                        # nums[2] >= nums[0]
            nums = [nums[2],nums[0],nums[1]]               
else:                                                # nums[1] >= nums[0]
    if nums[0] > nums[2]:
        nums = [nums[1],nums[0],nums[2]]
    else:                                            # nums[2] >= nums[0]
        if nums[1] > nums[2]:
            nums = [nums[1],nums[2],nums[3]]
        else:                                        # nums[2] >= nums[1]
            nums = [nums[2],nums[1],nums[0]] 
print (nums)

# for index in targets:                              # 索引记录方式打印
#     print (nums[index])
练习一.png
# 练习二
# 不推荐实际生产中使用此方法,效率低下
nums = []

for i in range(3):
    nums.append(int(input('No {} >>>'.format(i))))
    
targets = []

# while nums:                       # 不推荐使用 for 循环,for j in range(len(nums)):
#     targets.append(max(nums))
#     nums.remove(max(nums))
# print (targets)

while True:
    val = max(nums)
    print (val)
    nums.remove(val)
    if len(nums) == 1:
        print (nums[0])
        break
练习二.png
# 练习三
nums = []

for i in range(3):
    nums.append(int(input('No {} >>>'.format(i))))

nums.sort()   # 如需倒序,nums.sort(reverse=True)
print (nums)
练习三.png

相关文章

  • Python 数据结构

    Python 有四种内置的数据结构 - 列表(List),元组(Tuple),字典(Dictionary),集合(...

  • Python四个内置数据结构

    认识4个内置数据结构 Python提供了4个内置数据结构,可以用来保存任何对象集合,它们分别是列表、元组、字典、集...

  • Python 内置数据结构之二(元组)

    一、元组 tuple 1.1 一个有序的元素组成的集合 1.2 使用小括号 () 表示 示例 1.3 元组是 不可...

  • python 数据结构

    python包含数据结构包含list列表、tuple元组、dict字典、set集合这些都是内置类型。collect...

  • python怎么提升程序运行效率

    1、选择合适的数据结构python中有四种内置的数据结构,分别是列表List、元组Tuple、集合Set、字典Di...

  • 3_数据类型--字符串

    3_数据类型--字符串 python 提供了 4 种内置数据结构:List(列表)、Tuple(元组)、Dicti...

  • 元组

    一、什么是元组 (一)含义 元组是python内置的数据结构之一,是一个不可变序列 补充:不可变序列与可变序列 不...

  • 第9篇,数据结构

    数据结构,是用来存储一系列数据的集合。在Python中,有四种内置的数据结构 列表list 元组tuple 字典d...

  • 魔术方法(对象持久化)

    ### Python内置的数据结构是直接可以被序列化的: 字典、元组、列表、集合、字符串、整形、浮点型、布尔类型。...

  • Python3 列表

    序列是Python中最基本的数据结构。1、Python有6个序列的内置类型,但最常见的是列表和元组。2、序列都可以...

网友评论

      本文标题:Python 内置数据结构之二(元组)

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