• 列表和元组


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

    python中有一种叫容器(container)的数据结构,容器是包含其他对象的任意对象,序列(例如列表和元组)和映射(例如字典)是两类主要的容器。序列中的每个元素都有自己的编号,而映射中的每个元素则有一个名字(也称为键)。

    通用序列操作:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。

    索引:

    序列中所有元素都是有编号的-----从0开始递增。这些元素可以通过编号分别访问,如下所示:

    >>>a = "Hello"

    >>>a[0]

    'H'

    注:字符串就是一个由字符组成的序列。索引0指向第一个元素。

    使用负数索引时,Python会从右边,也就是从最后1个元素开始计数。最后1个元素的位置编号是-1。

    >>>a[-1]

    'o'

    字符串字面值可以直接使用索引,如

    >>>‘Hello’[0]

    'H'

    如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。例如,你对输入字符串的第十个字符感兴趣,那么,可以进行如下操作:

    >>>char = input()[9]    假设输入的字符串序列为abcdefghijklmn

    >>>char

    'j'

    分片:

    与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。分片通过冒号相隔的两个索引来实现:

    >>>tag = '<a href="http://www.python.org">Python web site</a>'

    >>>tag[9:30]

    'http://www.python.org'

    >>>tag[32:-4]    //-4代表倒数第四个元素

    'Python web site'  

    分片操作对于提取序列的一部分是很有用的,第一个索引时提取部分的第1个元素编号,而最后1个元素是分片之后剩下部分的第一个元素编号。

    简而言之,分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内的,而第2个则不在分片内。

    1、优雅的捷径:

    >>>numbers = [1,2,3,4,5,6,7,8,9,10]

    >>>numbers[3:6]

    [4,5,6]

    >>>numbers[0:1]

    [1]

    >>>numbers[7:10]  //注意索引10指向第11个元素---这个元素不存在,但是默认到最后一个

    [8,9,10]

    >>>numbers[-3,-1]

    [8,9]

    >>>numbers[3:1]  //如果左边索引的元素比右边索引的元素晚出现在序列中,则结果就是一个空序列

    []

    >>>numbers[5:]  //第二个索引为空时,默认到最后一个元素

    [6,7,8,9,10] 

    >>>numbers[:3]

    [1,2,3]

    >>>numbers[:]

    [1,2,3,4,5,6,7,8,9,10]

    2、更大的步长

    在进行分片的时候,可以指定分片的步长,通常默认步长为1。

    >>>numbers[0:10:1]   //1是指分片步长

    [1,2,3,4,5,6,7,8,9,10]  

    >>>numbers[0:10:2]

    [1,3,5,7,9]

    >>>numbers[::4]

    [1,5,9]

    步长不能为0,可以是负数,步长为负数表示从右向左提取元素

    >>>numbers[8:3:-1]

    [9,8,7,6,5,]

    >>>numbers[10:0:-2]

    [10,8,6,4,2]

    序列相加

    通过使用加号可以进行序列的连接操作

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

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

    >>>'Hello,' + 'world!'

    'Hello,world!'

    [1,2,3] + 'world!'   //提示错误,只有两种相同类型的序列才能进行连接操作

    乘法

    是数字x乘以一个序列会生成新的序列,而在新的序列中,原来的序列会重复x次

    >>>'python' * 5

    'pythonpythonpythonpythonpython'

    >>>[42] * 5

    [42,42,42,42,42]

    None、空列表和初始化:None是python的内建值,表示什么也没有,如创建一个长度为10的空列表

    >>>sequence = [None] * 10

    >>>sequence

    [None,None,None,None,None,None,None,None,None,None,]

    成员资格:检查一个值是否在序列中,可以用in运算符。

    >>>str = 'helloworld'

    >>>'he' in str

    True

    列表

    列表是可修改的

    删除元素:使用del语句

    list方法和分片赋值

    不等长赋值

    插入赋值

    列表方法

    1、append

    append方法用于在列表末尾追加新的对象

    2、count

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

    3、extend

    extend方法可以在列表的末尾一次性追加另一个序列中的多个值。

    这个操作看起来像是连接操作,两者的区别在于:extend方法修改了被拓展的序列(在这个例子中就是a)。而连接则是返回一个全新的列表。

    如果执行a+b操作,则效率比extend方法低

    也可用分片方法实现相同的结果:

    但是这样可读性差

    4、index

    index方法用于从列表中找出某个值第1个匹配项的索引位置

    5、insert

    insert方法用于将对象插入到列表中

    >>>numbers = [1,2,3,5,6,7]

    >>>numbers.insert(3,'four')

    >>>numbers

    [1,2,3,'four',5,6,7]

    与extend方法一样,insert方法的操作也可以用分片赋值来实现

    6、pop

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

    使用pop方法可以实现一种常见的数据结构--栈,入栈用append方法实现,出栈用pop方法实现

    7、remove

    remove方法用于移除列表中某个值的第一个匹配项:

    8、reverse

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

    9、sort

    sort方法用于在原位置对列表进行排序。在“原位置排序”意味着改变原来的列表,从而让其中的元素能按一定的顺序排列,而不是简单地返回一个已排序的列表副本。

    sort方法是不返回值的,如果想保持原来的列表不变,而得到新的排序列表如:

    y的值为空,因为sort方法修改了x的值却返回了空值

    可以先得到x的副本,然后对副本进行排序

    如果简单地把x赋值给y是没有用的,因为这样做让x和y都指向同一个列表了:

    另一种获取已排序列表副本的方法是,使用sorted函数:

    这个函数可以用于任何序列,并且返回一个类表:

    如果想把一些元素按照相反的顺序排列,可以先使用sort,然后再调用reserve方法。

    10、高级排序

    cmp、key、reverse参数可以用于sort函数进行排序。

    cmp是python内建函数用于比较大小。cmp(x,y)当x<y时返回负数,当x>y时返回正数,当x=y时返回0

    key作为参数

    reverse作为参数

    元组:不可变序列

    元组与列表一样,也是一种序列。唯一的不同是元组不能修改。

    元组通过圆括号()括起来

    >>>1,2,3

    (1,2,3)

    实现只有一个值的元组,必须加个逗号

    >>>2

    2

    >>>2,

    (2,)

    tuple函数

    tuple函数的功能和list函数基本上是一样的

    基本元组操作

    元组其实并不复杂--除了创建元组和访问元素之外,也没有太多其他操作

    元组的意义

    1、元组可以在映射中当做键使用---而列表不行

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

  • 相关阅读:
    【APIO2008】免费道路[最小生成树 kruskal]
    【2019.8.13】
    【矩阵】
    [POI2008]BLO-Blockade [tarjan 割点]
    poj1458 最长公共子序列 (动态规划)
    最长上升子序列
    poj1163 数字三角形 (动态规划)
    快速幂 (分治)
    求排列的逆序数(分治)
    快速排序 (分治)
  • 原文地址:https://www.cnblogs.com/jiweilearn/p/8783850.html
Copyright © 2020-2023  润新知