• 大爽Python入门教程 2-1 认识容器


    大爽Python入门公开课教案
    点击查看教程总目录

    1 什么是容器

    先思考这样一个场景:
    有五个学生,姓名分别为:
    Alan, Bruce, Carlos, David, Emma.
    需要给他们都打一遍招呼。
    即按照以下格式输出一遍

    hello, Alan!
    hello, Bruce!
    hello, Carlos!
    hello, David!
    hello, Emma!
    

    如果一个一个print,代码重复度太高,且后续每多一个学生,需要跟着增加一行print。
    20个学生就需要20行代码,100个学生就需要100行代码,
    这样的代码是很糟糕的。

    回顾第一章,我们可能能想到使用循环。
    但是由于每个学生都有自己的名字,这些名字一般是不同的字符串,
    所以不能直接使用第一章学到的for i in range(n)循环。

    那么我们希望怎样一种循环?
    我们希望:
    有多少个学生,循环就执行多少次,
    同时第几次循环中,我们能知道第几个学生的姓名信息。

    实际上,
    这会被分成两步去实现,
    有一个东西,去存放学生的姓名信息。
    使用循环,遍历(依次获取)这个东西里面存放的信息。

    这样一种能存放其他变量信息的东西,称为容器。
    python里面最常用的三种容器:

    • 列表(list)
    • 元组(tuple)
    • 字典(dict,dictionary)

    2 列表list

    先回到我们刚才描述的场景,
    对这个场景而言,选择列表list做为容器是最好的。

    代码如下

    # 首先,新建一个存放学生的姓名信息的容器,容器名为names
    names = ["Alan", "Bruce", "Carlos", "David", "Emma"]
    
    for name in names:  # 遍历容器:依次获取学生姓名信息
        print("hello, %s!" % name)
    

    # 后面都为注释,
    运行代码时,注释是不执行的。
    注释主要是用来解释说明代码的用意。
    方便别人看懂(也方便自己看懂)

    列表基础

    • 列表用[]来表示,内部存放的数据,称为项(item)或者元素(element),不同元素用,分隔。
    • 可以使用for ... in ...来遍历列表里面的元素(依次获取全部元素信息)
    • 列表使用append(item)方法来添加新元素
    • *列表内部的元素可以是不同的类型,但一个列表通常会存放相同类型的数据(不同类型的数据一般会分开存放)。
    • *列表是有序的。
    • *列表的类型为list

    使用示例

    >>> names = ["Alan", "Bruce", "Carlos"]
    >>> type(names)
    <class 'list'>
    >>> for name in names:
    ...     print(name)
    ...
    Alan
    Bruce
    Carlos
    >>> names.append("David")
    >>> names
    ['Alan', 'Bruce', 'Carlos', 'David']
    >>> for name in names:
    ...     print(name)
    ...
    Alan
    Bruce
    Carlos
    David
    

    3 场景拓展

    更近一步,假设这五个学生的数学成绩分别为:
    90, 80, 85, 92, 81.

    需要按以下格式展示他们的姓名和成绩,

    Alan, your's math score is 90.
    Bruce, your's math score is 80.
    Carlos, your's math score is 85.
    David, your's math score is 92.
    Emma, your's math score is 81.
    

    这个问题,有多种解决思路。

    4 元组tuple

    一种思路是,使用元组作为子容器
    把每个学生的名字和分数一起放在一个元组里,
    看作每个学生的个人信息,再把每个学生的个人信息(名字和分数组成的元组)放到列表里面。
    代码如下

    info_list = [
        ("Alan", 90),
        ("Bruce", 80),
        ("Carlos", 85),
        ("David", 92),
        ("Emma", 81),
    ]
    
    for info in info_dict:
        name, score = info
        print("%s, your's math score is %s." % (name, score))
    

    元组基础

    • 元组用()来表示,内部存放的数据,称为项(item)或者元素(element),不同元素用,分隔。
    • 元组和列表很像,不过元组是不可变对象,不能添加、修改或删除项。
      所以一般定义了一个元组,元组元素的数量就是固定的,
      所以可以直接用相同的固定数量的变量来承接元组中的项。
    • *元组的类型为tuple

    使用示例

    >>> info = ("Alan", 90)
    >>> type(info)
    <class 'tuple'>
    >>> name, score = info
    >>> name
    'Alan'
    >>> score
    90
    >>> for item in info:
    ...     print(item)
    ...
    Alan
    90
    

    补充说明:一般定义了一个元组,元组元素的数量就是固定的,
    所以可以直接用相同的固定数量的变量来承接元组中的项。

    其实列表也可以用同等数量的变量来承接列表的所有元素。
    但是列表的元素数量是可变的,即数量是不固定的,所以一般不这么做。

    一般不用for循环来取元组的值,而是直接用同样个数的变量来取。

    5 字典dict

    另一种思路是,使用字典作为容器。
    那么学生的名字和分数就是一一对应的关系。
    代码如下

    info_dict = {
        'Alan': 90,
        'Bruce': 80,
        'Carlos': 85,
        'David': 92,
        'Emma': 81
    }
    
    for name in info_dict:
        score = info_dict[name]
        print("%s, your's math score is %s." % (name, score))
    

    补充说明:原本python的字典是无序的(目前很多老教程也是这么说的),
    那么这个输出的顺序不能保证一致,可能是乱的。
    不过python3.6以后,字典就改成有序的了(遵循先后顺序,也叫插入顺序),
    所以这个输出是完全符合的。

    字典基础

    • 字典用{}来表示,内部存放键值对,键值对内部用:分隔键与值,即key: value,不同键值对用,分隔。

    • 可以使用for ... in ...来遍历字典里面的键(依次获取全部键)

    • 字典的键的类型,只能为字符串、数字、元组。

    • 字典的键是唯一的,不能重复。

    • 字典的值的类型,可以为任何类型。

    • 字典的键可以是不同的类型,值也可以是不同的类型,但通常,一个字典的键会使用相同类型,值也使用相同类型。

    • 字典通过dict[key]来取值,dict[key]=value赋值(如果key已存在就是修改值)。

    使用示例

    >>> info_dict = {
    ...    'Alan': 90,
    ...    'Bruce': 80
    ... }
    >>> type(info_dict)
    <class 'dict'>
    >>> info_dict['Alan']
    90
    >>> for key in info_dict::
    ...     print(key)
    ...
    Alan
    Bruce
    >>> for key in info_dict::
    ...     print(info_dict[key])
    ...
    90
    80
    >>> info_dict['Carlos'] = 85
    >>> info_dict
    {'Alan': 90, 'Bruce': 80, 'Carlos': 85}
    >>> info_dict['Bruce'] = 88
    >>> info_dict
    {'Alan': 90, 'Bruce': 88, 'Carlos': 85}
    

    6 容器简单比较

    上一部分说到过,容器是一种能存放其他变量信息的东西。

    实际上,容器存放的是,数据与数据关系

    字典中的数据是对应关系。
    列表中的数据是先后顺序关系。
    元组中的数据是一个固定的小组的关系。

    不同的场景,使用的数据的关系不同,
    解决对应需求的容器往往也不同。

  • 相关阅读:
    商人的诀窍
    商人小鑫
    懒虫小鑫
    悼念512汶川大地震遇难同胞
    最少拦截系统
    活动选择问题
    删数问题
    常用排序算法的时间和空间复杂度总结
    一些博主
    C中自己的memcpy
  • 原文地址:https://www.cnblogs.com/BigShuang/p/15026961.html
Copyright © 2020-2023  润新知