• Python基础学习 -- 列表与元组


    返回到Python知识体系

    本节学习目的:

           掌握数据结构中的列表和元组

    应用场景:

           编程 = 算法 + 数据结构

           数据结构: 通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些元素可以是数字或者字符,或者其他数据结构.

           容器: 序列,映射,集合是三种比较常见的数据结构

           序列: 每个元素都有一个编号,也叫做索引

           映射: 每个元素都有一个名字,称为键值对

           集合: 内部元素都是不重复的

    联系本文作者交流或者索取相关代码及软件请加入QQ群:小马哥的技术分享 413939157.

    (一)   序列概览

    内建序列种类

    列表和元组区别

    列表和元组的应用场景

    1,使用元组作为字典的键,因为键不可修改,所以就不能使用列表

    2,需要操作一组数值的时候,序列很好用

    序列里面也可以包含其他序列

    (二)   序列通用操作

    2.1   索引

    序列的特点就每个元素都有自己位置的编号,并且编号是在0开始的,用于找到某个位置上的元素.

    正号索引: 开头第一个元素,索引为0开始

    负号索引: -1代表倒数第一个元素,-2代表倒数第2个元素,依次类推. 

    实例2.1.1

    greeting = 'hello world'
    print(greeting[0])

    print(greeting[-1]) 

    案例2.1.2
    接收控制台输入年月日,打印年月日的英文格式.
    '''
    1,
    输入年月日
        定义年月日三个变量分别接收输入
        定义两个序列分别存储对应的英文月日
    2,格式化: 怎样对输入的月数字,转变为英文-->索引
    '''
    year = input("请输入年: ")

    month = input("请输入月份(1-12): ")
    day = input("请输入日期(1-31): ")
    e_month = ['January','February','March','April','May','June','July','August','September','October','November','December']
    e_day = ['st','nd','rd']+17*['th']+['st','nd','rd']+7*['th']+['st']
    e_date = e_month[int(month)-1]+' '+e_day[int(day)-1]+' '+year
    print(e_date)

     

    2.2   分片

    应用场景: 索引仅仅是取一个元素,如果要一次取一定范围内的多个元素呢?

    使用方法: 冒号分割的两个索引表示边界范围,[开始索引: 结束索引]  <-注意不包括结束索引位置上的元素

    实例2.2.1 分片

    greeting = 'hello world'   #字符串长度是11
    print(greeting[0:1])

    print(greeting[0:11])

    问题: 如果对分片修改会修改原字符串吗?

    实例2.2.2 访问最后面n个元素

    numbers = [1,2,3,4,5,6,7,8,9,10]
    print(numbers[7:11])
    # [8, 9, 10]   访问序列的后面三个元素
    print(numbers[-1:-3])

    # [] 没有数据的原因: 左边界索引一定要小于右边界索引
    print(numbers[-3:-1])

    # [8, 9] 只有两个元素的原因: 半开半闭区间,只包括左边界索引位置上的元素,不包括右边界索引位置上的元素
    print(numbers[-3:])

    # [8, 9, 10] 缺省写右边界索引: 这样范围就是默认取到最后一个元素
    print(numbers[:-1])

    # [1, 2, 3, 4, 5, 6, 7, 8, 9] 缺省写左边索引: 范围默认在第一个元素开始取
    print(numbers[:])

    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  两个边界都缺省: 范围就是全部了

    上面的分片都是挨个取元素,也就是步长为1,还可以设定步长取出元素

    #默认步长的分片如上面,其实是缺省了一个参数
    print(numbers[0:11:1])

    #设定步长的分片
    print(numbers[0:11:2])

     

     

    2.3   相加/连接

    本质: 连接操作

    操作: 连接操作

    print([1,2,3,4,5]+[6,7,8,9,10])
    print('hello '+ 'world')
    print([1,2,3,4,5]+'hello world')# 注意:这里是要抛错的,Python是强数据类型,也就是不会自动隐式转换数据类型,所以在这里只有两种相同数据类型的序列才能相加

     

    2.4   乘法

    其实在上面已有例子使用到了数列的乘法,本质上就是多个数列相加

      [1,2,3,4,5]*10

      ‘string’*10

    实例2.4.1 创建一个10个元素的序列,但是里面上面都不存

       [none]*10

      none = [None]*10

      print(len(none))  #现在还学到长度,这是我猜的一个函数

     

     

    2.5   成员资格

    用于检查某个元素是否属于序列的成员,使用布尔运算符in

    返回值成为布尔值: 条件为真返回True,为假返回False.

    print(None in none)    #返回True
    print('P' in  'python')  #返回False
     
    # 查看用户名和密码是否存在
    accout = [['mali','123'],['hadoop','java'],['spark','scala'],['ml','python'],['google','go']]

    print(['mali','123'] in  accout)      #返回True
    print('mali' in  accout)              #返回False 

    2.6   长度,最小值,最大值

    查看列表长度: len函数

    min函数: 序列中最小的元素

    max函数: 序列中最大的元素

    实例2.6.1

      print(len(account))

     print(max(account))
     print(min(account))
     

      >>> max('java','Java','scala','python')

      'scala'

      >>> min('java','Java','scala','python')

      'Java'

    (三)   列表

    3.1 列表的特点

    字符串不能修改,于是可以将字符串转变为列表处理

    列表是可以对元素进行增删改查的

    3.2 list函数

    先看如下代码,可以对字符串进行拼接,可以根据索引查询字符串

    content = "hello python"
    print("a"+"b")

    print(content+'a')
    print(content[0])

    但是,如果修改字符串某个位置上的字符是否能成功呢?

      >>> content = "hello python"

      >>> content[0]='a'

      Traceback (most recent call last):

        File "<stdin>", line 1, in <module>

      TypeError: 'str' object does not support item assignment

    结果是直接抛错

     

    如何满足修改字符串的需求呢?

    list函数可以将一个字符串转成一个列表类型,其实这个强转’123’到123一样的道理: int(‘123’)

      >>> list(content)

      ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

     

    3.3 基本的列表操作

    前面序列的通用操作中各种方法都适用于list,并且list还有自己的独特操作,上面字符串不能修改,list可以修改就是一种,还有下面的

    1. 修改列表元素

      >>> list(content)

      ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

      >>> chars = list(content)

      >>> chars

      ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

      >>> chars[0] = 'H'

      >>> chars

      ['H', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

           注意: 不能为一个位置不存在的元素进行赋值

             >>> len(chars)

      12

      >>> chars[12]='!'

      Traceback (most recent call last):

       File "<stdin>", line 1, in <module>

      IndexError: list assignment index out of range

     

    1. 删除元素

    使用del函数

    >>> nums = [1,2,3,4,5,6]

    >>> nums

    [1, 2, 3, 4, 5, 6]

    >>> del(nums[5])

    >>> nums

    [1, 2, 3, 4, 5]

    >>> len(nums)

    5    #长度变为5

    1. 分片赋值

    作用: (1)同时为多个元素进行赋值; (2)替换;(3)还可以用来插入;

    实例1: 赋值与追加

           >>> name = list("hadoop")

      >>> name

      ['h', 'a', 'd', 'o', 'o', 'p']

      >>> name[6:] = list("空格java")

      >>> name

      ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'j', 'a', 'v', 'a']

    实例2: 替换/修改元素

                  >>> name

      ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'j', 'a', 'v', 'a']

      >>> name[7:] = list("python")

      >>> name

      ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

    实例3: 插入元素

           >>> name

      ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

      >>> name[0:0] = list('hello ')  #因为分片是半开半闭区间,所以这个时候分片是空的,这个操作也就变成插入了

      >>> name

      ['h', 'e', 'l', 'l', 'o', ' ', 'h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

           分片也是可以用来删除的,del函数

    3.4 列表方法

    方法: 通过对象调用的函数

           使用: 对象.方法(参数)

           1,append

           2,count

           3,extend

           4,index

           5,insert

           6,pop

           7,remove

           8,reverse

           9,sort

           10,高级排序

    (四)   元组

    定义: tuple也是序列,和序列中的列表list不同的是,元组tuple不能修改(字符串也是不能修改的)

    使用:

           创建一个tuple,通过圆括号定义,或者直接逗号分隔的一些值

                  >>> 1,2,3

      (1, 2, 3)

      >>> ('a','b','c')

      ('a', 'b', 'c')

      >>> t1 = ('java','scala','python','go','javascript')

      >>> t1

      ('java', 'scala', 'python', 'go', 'javascript')

      >>> type(t1)

      <class 'tuple'>

    空元组: ()

                  >>> type(())

      <class 'tuple'>

    特别注意: 一个元素的元组,也是元组,但是形式要特别注意

                  >>> a = ('a')    #虽然也包括在圆括号里面,但是检查类型, 是str

                  >>> type(a)

      <class 'str'>

      >>> b = ('b',)       #尽管只有一个元素,也要加上逗号

      >>> type(b)

      <class 'tuple'>

    再例如:

           >>> 100      #这是一个数

      100

      >>> 100,       #加上逗号,这是一个元组

      (100,)

    再看一个例子:

           >>> 10*(100+100)   #在这里没有逗号,属于四则运算,括号输入运算符号

      2000

      >>> 10*(100+100,)       #在这里有逗号,属于元素,对里面的元素进行拼接

      (200, 200, 200, 200, 200, 200, 200, 200, 200, 200)

    tuple函数

           tuple函数和list函数一样,将参数(参数在这里是序列)转换为元组,其实就是类型转换

           >>> ittech = ['hadoop','spark','storm','kylin','hive','hbase']

      >>> ittech

      ['hadoop', 'spark', 'storm', 'kylin', 'hive', 'hbase']  #注意括号: 是中括号

      >>> type(ittech)

      <class 'list'>  #注意这里

      >>> 

      >>> t_ittech = tuple(ittech)

      >>> t_ittech

      ('hadoop', 'spark', 'storm', 'kylin', 'hive', 'hbase')      #注意括号: 是圆括号

      >>> type(t_ittech)

      <class 'tuple'>     #注意这里

    基本元组操作

           元组只有创建和访问操作.访问操作和其他序列一样,通过索引访问,也有分片访问操作

    元组的存在意义

           在映射中当做键使用,不可以被改变

    返回到Python知识体系

    联系本文作者交流或者索取相关代码及软件请加入QQ群:小马哥的技术分享 413939157.

  • 相关阅读:
    Mitmproxy使用教程for mac
    Flink重启策略
    Flink中的Time
    Flink的分布式缓存
    8-Flink中的窗口
    10-Flink集群的高可用(搭建篇补充)
    Flink-Kafka-Connector Flink结合Kafka实战
    15-Flink实战项目之实时热销排行
    16-Flink-Redis-Sink
    17-Flink消费Kafka写入Mysql
  • 原文地址:https://www.cnblogs.com/hadoop2015/p/7282475.html
Copyright © 2020-2023  润新知