第三章 - Python 内置数据结构

元组tuple

  • 一个有序的元素组成的集合

    • 使用小括号 ( ) 表示
    • 元组是不可变对象

元组的定义 初始化

  • 定义

    • tuple() -> empty tuple
    • tuple(iterable) -> tuple initialized from iterable's item

   t = tuple() # 工厂方法,空元组是不能插入的
   t = ()
   t = tuple(range(1,7,2)) # iteratable
   t = (2,4,6,3,4,2)
   t = (1,) # 一个元素元组的定义,注意有个逗号
   t = (1,)5
   t = (1,2,3)
6
   元组就像个只读列表,好处就是比列表占用空间少。
   t1 = (1, [2, 3], 4)
   t1[1][0] = 10

元组元素的访问

  • 支持索引(下标)
  • 正索引:从左至右,从0开始,为列表中每一个元素编号
  • 负索引:从右至左,从-1开始
  • 正负索引不可以超界,否则引发异常IndexError

  • 元组通过索引访问
    • tuple[index] ,index就是索引,使用中括号访问

   t[1]
   t[-2]
   t[1] = 5

元组查询

  • index(value,[start,[stop]])

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

元组其它操作

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

命名元组namedtuple

  • 帮助文档中,查阅namedtuple,有使用例程
  • namedtuple(typename, field_names, verbose=False, rename=False)
    • 命名元组,返回一个元组的子类,并定义了字段
    • field_names可以是空白符或逗号分割的字段的字符串,可以是字段的列表

   from collections import namedtuple
   Point = namedtuple('_Point',['x','y']) # Point为返回的类
   p = Point(11, 22)

   Student = namedtuple('Student', 'name age')
   tom = Student('tom', 20)
   jerry = Student('jerry', 18)
   tom.name

练习

  • 依次接收用户输入的3个数,排序后打印

      1. 转换int后,判断大小排序。使用分支结构完成
      1. 使用max函数
      1. 使用列表的sort方法
      1. 冒泡法

冒泡法

  • 冒泡法

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

nums = num_list[2]
print(nums)
length = len(nums)
count_swap = 0
count = 0
# bubble_sort
for i in range(length): # 有n个数要排序
    flag = False
    for j in range(length-i-1): # 比较的次数
        count += 1
        if nums[j] > nums[j+1]:
            tmp = nums[j]
            nums[j] = nums[j+1]
            nums[j+1] = tmp
            flag = True # swapped
            count_swap += 1
    if not flag:
        break
print(nums, count_swap, count)

冒泡法总结

  • 冒泡法需要数据一轮轮比较
  • 可以设定一个标记判断此轮是否有数据交换发生,如果没有发生交换,可以结束排序,如果发生交换,继续下一轮排序
  • 最差的排序情况是,初始顺序与目标顺序完全相反,遍历次数1,...,n-1之和n(n-1)/2
  • 最好的排序情况是,初始顺序与目标顺序完全相同,遍历次数n-1
  • 时间复杂度O(n2)

最后

本文的另外链接是:https://herodanny.github.io/python-magedu-2018-notes4.html

Python全栈-magedu-2018-笔记4的更多相关文章

  1. 自学Python全栈开发第一次笔记

           我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...

  2. Python全栈之jQuery笔记

    jQuery runnoob网址: http://www.runoob.com/jquery/jquery-tutorial.html jQuery API手册: http://www.runoob. ...

  3. python全栈开发之OS模块的总结

    OS模块 1. os.name()      获取当前的系统 2.os.getcwd      #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...

  4. python全栈开发中级班全程笔记(第二模块、第四章(三、re 正则表达式))

    python全栈开发笔记第二模块   第四章 :常用模块(第三部分) 一.正则表达式的作用与方法 正则表达式是什么呢?一个问题带来正则表达式的重要性和作用      有一个需求 : 从文件中读取所有联 ...

  5. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  6. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  7. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  8. 老男孩最新Python全栈开发视频教程(92天全)重点内容梳理笔记 看完就是全栈开发工程师

    为什么要写这个系列博客呢? 说来讽刺,91年生人的我,同龄人大多有一份事业,或者有一个家庭了.而我,念了次985大学,年少轻狂,在大学期间迷信创业,觉得大学里的许多课程如同吃翔一样学了几乎一辈子都用不 ...

  9. 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂

    Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...

  10. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. sql server 2008怎样导入mdf,ldf文件,怎样解决导入mdf,ldf文件时出现附加数据库错误的问题

    废话不多说,直入主题吧. 1:打开sql server 2008,右键数据库-->附加 2:这时出现这个界面点击添加 3:打开数据库实例的安装目录,打开DATA文件夹;(如我的实例目录地址为:D ...

  2. input(type="checkbox"|type="radio")+jquery使用

    1.用.is(":checked")判断input是否为选中状态 例: var value=$(this).is(":checked"); localStora ...

  3. jquery.ajax()详解

    jQuery.ajax() 函数详解 traditional 如果你希望使用传统方式来序列化参数,将该属性设为true. 传递数组时, traditional必须为true var arr = []; ...

  4. codeblocks添加编译选项

    -std=c++0x

  5. springboot上传文件 & 不配置虚拟路径访问服务器图片 & springboot配置日期的格式化方式 & Springboot配置日期转换器

    1.    Springboot上传文件 springboot的文件上传不用配置拦截器,其上传方法与SpringMVC一样 @RequestMapping("/uploadPicture&q ...

  6. 基于VC的MFC界面开发

    教你熟悉VC6.0创建一个可视化软件的过程 UpdateData(TRUE);//将输入数据赋给文本框变量. UpdateData(FALSE);//将内容显示在文本框中 AfxMessageBox( ...

  7. 解决nginx和php使用ckfinder无法上传大文件的问题

    现象描述:cms内容发布系统上传不了大文件,当上传超过32M文件时就上传不了 提示:无效的文件. 文件尺寸太大. 分析文件上传过程:browser --> nginx --> php 需要 ...

  8. 【原创】大数据基础之Azkaban(1)简介、源代码解析

    Azkaban3.45 一 简介 1 官网 https://azkaban.github.io/ Azkaban was implemented at LinkedIn to solve the pr ...

  9. 【原创】大叔经验分享(27)linux服务器升级glibc故障恢复

    redhat6系统默认安装的glibc-2.12,有的软件依赖的是glibc-2.14,这时需要升级glibc,下载安装 http://ftp.gnu.org/gnu/glibc/glibc-2.14 ...

  10. 【原创】大叔案例分享(3)用户行为分析--见证scala的强大

    一 场景分析 用户行为分析应用的场景很多,像线上网站访问统计,线下客流分析(比如图像人脸识别.wifi探针等),比较核心的指标有几个: PV | UV | SD | SC 指标说明: PV(Page ...