• Python入门笔记——(2)列表和元组


    一、序列

          python包含6种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。序列中每个元素被分配一个序号即索引,第一个索引为0,第二个为1,以此类推。也可以反向计数,最后一个元素标记为-1,倒数第二个标记为-2,以此类推。序列可以包含其他序列。

    列表和元组的区别在于,列表可以修改,而元组不可以修改。

    二、通用序列操作

    序列的通用操作包括索引、分片、加、乘、检查成员资格(某元素是否属于序列的成员)等,此外还有计算序列长度、求序列最大元素最小元素等内建函数。

    1、索引

    序列第一个位置索引为0,倒序访问第一个元素索引为-1,如:

    >>>'Hello'[0]
    'H'
    >>>'Hello'[-1]
    'o'

    2、分片

    分片操作用于访问序列中的一部分范围的元素,分片操作需要提供两个索引值作为边界(步长可选),第一个索引的元素包含在分片中,第二个索引的元素则不在分片里。如果第一个索引为空,则默认从第一个元素开始;如果第二个索引为空,则默认包括后面的所有元素,如:

    >>>num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>>num[3 : 6]
    [4, 5, 6]
    >>>num[ : 2]
    [1, 2]
    >>>num[-3 : -1]
    [8, 9]
    >>>num[-3 : ]
    [8, 9, 10]
    >>>num[ : ]
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>>num[0 : 10 : 2]
    [1, 3, 5, 7, 9]
    >>>num[8 : 3 : -1]
    [9, 8, 7, 6, 5]

    3、序列加、序列乘

    通过加法运算符可以进行序列连接操作,乘法运算可以生成原序列重复多次的新序列。加法运算符只能连接同类型的序列,否则会抛出TypeError错误。乘法运算只能使用序列乘以一个正整数。None用于空列表的初始化。

    >>>[1, 2, 3] + [4, 5, 6]
    [1, 2, 3, 4, 5, 6]
    >>>'Hello' + "C"
    'HelloC'
    >>>'Hello' * 3
    'HelloHelloHello'
    >>>[5] * 5
    [5, 5, 5, 5, 5]

    4、成员资格检查

    检查一个值是否在序列中,可以使用in运算符,返回布尔值,如果该值在序列中则返回True,反之返回False。

    5、长度、最大值和最小值

    len函数返回序列中包含的元素数目,max和min函数分别返回序列中的最大值和最小值。

    >>>num = [100, 34, 678]
    >>>len(num)
    3
    >>>max(num)
    678
    >>>min(num)
    34
    >>>max(15, 28, 90, 7, 666)
    666

    三、列表

    1、列表操作

    list函数强制将其他类型转换为列表,如:

    >>>list('Hello')
    ['H', 'e', 'l', 'l', 'o']

    ''.join(somelist)将字符组成的列表转换为字符串。

    可以利用索引访问列表元素并更改元素值,不能为一个位置不存在的元素赋值。

    删除元素通过del语句实现,del也可以用于删除字典元素、变量等。

    分片赋值可以将原序列替换为序列不等长的新序列,也可以实现插入新元素、删除现有元素。如:

    >>>name = list('Perl')
    >>>name[1 : ] = list('ython')
    >>>name
    ['P', 'y', 't', 'h', 'o', 'n']
    #分片实现插入元素
    >>>num = [1, 5]
    >>>num[1 : 1] = [2, 3, 4]
    >>>num
    [1, 2, 3, 4, 5]
    #分片实现删除元素
    >>>num[1 : 4] = []
    >>>num
    [1, 5]

    2、列表方法

    方法的调用格式:object.method(param)

    append:在列表末尾追加新的对象

    count:统计某个元素在列表中出现的次数

    extend:在列表的末尾一次性追加另一个序列中的多个值

    index:从列表中找出某个值第一个匹配项的索引位置,如果未找到则抛出ValueError错误

    insert:将对象插入列表中,参数为插入位置和对象值

    pop:移除列表中的一个元素(默认为最后一个),并返回该元素的值

    remove:移除列表中某个值的第一个匹配项,如果未找到则抛出ValueError错误

    reverse:将列表中的元素反向存放

    sort:在原位置对列表进行排序(默认从小到大)

    >>>lst = [1, 2, 3]
    >>>lst.append(4)
    >>>lst
    [1, 2, 3, 4]
    >>>x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
    >>>x.count(1)
    2
    >>>a = [1, 2, 3]
    >>>b = [4, 5, 6]
    >>>a.extend(b)
    >>>a
    [1, 2, 3, 4, 5, 6]
    >>>['we', 'are', 'the', 'knights', 'who', 'say', 'ni'].index('who')
    4
    >>>num = [1, 2, 3, 5, 6, 7]
    >>>num.insert(3, 'four')
    >>>num
    [1, 2, 3, 'four', 5, 6, 7]
    >>>x = [1, 2]
    >>>x.pop(0)
    1
    >>>x
    [2]
    >>>x = ['to', 'be', 'or', 'not', 'to', 'be'].remove('be')
    >>>x
    ['to', 'or', 'not', 'to', 'be']
    >>>x.reverse()
    ['be', 'to', 'not', 'or', 'to']
    >>>x = [4, 6, 2, 1, 7, 9]
    >>>x.sort()
    >>>x
    [1, 2, 4, 6, 7, 9]

    sort方法原地修改列表而返回的值为空值,如果需要一个排好序的副本而保留原列表顺序不变,下面的方法不可行:

    >>>x = [4, 6, 2, 1, 7, 9]
    >>>y = x.sort()
    #sort方法返回值为空值
    >>>print y
    None

    正确的做法是:

    #y为排好序的副本,而原列表顺序不变
    >>>x = [4, 6, 2, 1, 7, 9]
    >>>y = x[ : ]
    >>>y.sort()

    注意,简单地把x赋值给y是没用的,这样做是把x、y都指向同一个列表,并没有实现复制。

    还可以使用sorted函数:

    >>>x = [4, 6, 2, 1, 7, 9]
    >>>y = sorted(x)

    3、高级排序

    如果希望元素可以按照特定方式排序,则可以自定义compare函数作为sort方法的参数,可选的关键字参数还有key和reverse,用法如下:

    >>>num = [5, 2, 9, 7]
    >>>num.sort(cmp)
    >>>num
    [2, 5, 7, 9]
    >>>x = ['aaaaaaaa', 'aaaaaaa', 'acme', 'add', 'aerate']
    >>>x.sort(key = len)
    >>>x
    ['add', 'acme', 'aerate', 'aaaaaaa', 'aaaaaaaa']
    >>>x = [4, 6, 2, 1, 7, 9]
    #reverse是简单的布尔值,为真表示进行反向排序,默认为假
    >>>x.sort(reverse = True)
    >>>x
    [9, 7, 6, 4, 2, 1]

    四、元组

    元组不可修改,使用逗号分隔了一些值就自动创建了元组,空元组的创建需要用没包含内容的圆括号括起来。一个值的元组必须在值后面加逗号:

    >>>1, 2, 3
    (1, 2, 3)
    >>>()
    ()
    >>>42
    42
    >>>42,
    (42,)
    >>>3 * (40 + 2)
    126
    >>>3 * (40 + 2,)
    (42, 42, 42)

    tuple函数将一个序列转换为元组。

    元组存在的意义:

    (1)在映射(和集合的成员中)当做键来使用,因为键不可更改;

    (2)元组作为很多内建函数和方法的返回值存在。

  • 相关阅读:
    keil 提示"running with code size limit 32k"
    关于C语言编译出现give arg types警告问题
    windows10添加设备管理器的快捷方式到桌面
    deepin20社区版 安装 STM32CubeIDE 小记
    STM32开发 printf和scanf函数的重定向——修改HAL标准库用printf函数发送数据直接输出
    ardupilot环境配置之eclipse指定jdk版本启动,解决“Version XXXX of the JVM is not ......"报错的问题
    jdk9,10,11,12没有jre安装方法
    C++ 类构造函数 & 析构函数
    STM32 Keil中关于stlink的调试 下载设置
    STM32 SWD下载出现no target connect解决方法
  • 原文地址:https://www.cnblogs.com/cieusy/p/9809942.html
Copyright © 2020-2023  润新知