python基础教程-第二章-列表和元组

时间:2022-06-03 23:12:07

    本章将引入一个新的概念,:数据结构。数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构。在python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是0,第二个则是1,依次类推。

2.1 序列概览

    python包含6中内建的序列,本章重点讨论最常用的两种:列表和元组。其他的内建序列类型字符串、Unicode字符串、buffer对象和xrange对象

    列表和元组的主要区别在于,列表可以修改,元组则不能。也就是说如果要根据要求来添加元素,那么列表可能会更好用;而处于某种原因,序列不能修改的时候,使用元组更为合适。使用后者的理由通常是技术性的,它与python内部的运行方式有关。这也是内建好桉树可能返回元组的原因。一般来说,在几乎所有的情况下列表都可以替代元组 

注意:python之中还有一种名为容器(container)的数据结构。容器基本上是包含其他对象的任意对象。序列(如列表和元组)和映射(例如字典)是两类主要的容器。序列重点额每个元素都有自己的编号,而映射重点额每个元素则有一个名字(也称为键)。至于既不是序列也不是映射的容器类型,集合(set)就是一个例子 

2.1 通用序列操作

    所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing),分片(sliceing),加(adding),乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,python还有机选序列长度,找出最大元素和最小元素的内建函数

2.1.1 索引

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

    >>>greetging = 'hello'0\

    >>>greeting[0]

    >>>'h'

    字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引,而不需要一个变量引用他们。两种做法的效果是一样的:

    >>>'hello'[0]

    >>>'h'

2.1.2 分片

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

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

    >>>numbers[3:6]

    >>>[4.5.6]

    进行分片的时候,分片的开始和结束点需要进行指定,而另一个参数--步长通常都是隐式设置的。默认步长是1.

2.1.3 序列相加

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

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

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

    列表和字符串是无法连接在一起的,尽管他们的都是序列,简答的来说,两种相同类型的序列才能进行连接操作

2.1.4乘法

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

    >>>'python'*5

    >>>pythonpythonpythonpythonpythonpythonpython

    >>>[42]*10

    >>>[42,42,42,.........]

2.1.5 成员资格

    为了检查一个值是否在序列中,可以使用in运算符。该运算符和之前已经讨论过的运算符有一点不同。这个运算符检查某个条件是否为真,然后返回相应的值:条件为真返回True,条件为假返回False。这样的运算符叫做布尔运算符,而真值则叫做布尔值。

    >>>permissions = 'rw'

    >>>'w' in permissions

    >>>True

    >>> 'x' in permissions

    >>>False

2.1.6 长度,最小值和最大值

    内建函数len、min和max非常有用。len函数返回序列中所包含元素的数量,min函数和max函数则分别返回序列中最大和最小的元素

    >>>numbers = [100,34,678]

    >>>len(numbers)

    >>>3

    >>>max(numbers)

    >>>678

    >>>mix(numbers)

    >>>34

2.2 列表

    在前面的例子中已经用了很多次列表,他的强大之处不言而喻。本节会讨论列表不同于元组和字符串的地方:列表是可变的(mutable)

2.2.1 list函数

    因为字符串不能像列表一样被修改,所以有时根据字符串创建列表会很有用。list函数可以实现这个操作

    >>>list('hello')

    >>>['h','e','l','l','o']

    将字符串转换为列表:

    >>>a = list('hello')

    >>>b = list(a[0] +a[1] +a[2] +a[3] +a[4])

    >>>type(b)

    >>><type 'list'>

2.2.2 基本的列表操作

    列表可以使用所有适用于序列的标准操作,列如索引,分片,连接和乘法。有趣的是,列表是可以修改的,本届会介绍一些可以改变列表的方法:元素复制,元素删除,分片赋值以及列表方法   

    1.改变列表:元素赋值

    改变列表是很容易的,只需要使用普通赋值语句即可。然而。我们并不会使用x=2这样的语句进行赋值,二十使用索引标记来为某个特定的,位置明确的元素赋值

  如x[1] = 2

    >>>x = [1,1,1]

    >>>x[1] = 2

    >>>x

    >>>[1,2,1]

    2.删除元素

    从列表中删除元素也很容易:使用del 语句来实现

    >>>names = ['allen','alex','alice']

    >>>del name[1]

2.2.3 列表方法

    1.append  

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

    >>>1st = [1,2,3]

    >>>1st.append(4)

    >>>1st

    >>>[1,2,3,4]

    2.count

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

    >>>x = [1,1,2,3,4,5,1]

    >>>x.count(1)

    >>>3

    3.extend

    extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有列表:

    >>>a = [1,2,3]

    >>>b= [4,5,6]

    >>>a.extend(b)

    >>>a

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

    4.index

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

    >>>knights = [1,2,3,4,5,6,7]

    >>>knights.index(3)

    >>>4

    5.insert

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

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

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

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

    6.pop

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

    >>>x = [1,2,3]

    >>>x.pop()

    >>>3

    >>>x

    >>[1,2]

    7.remove

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

    >>>x = ['to','be','or','not','be']

    >>>x.remove('be)

    >>>x

    >>>['to','or','not','be']

    8.reverse

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

    >>>x = [1,2,3]

    >>>x.reverse()

    >>>x

    9.高级

    >>>[3.2.1]

    9.sort

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

    >>>x = [4,3,5,7,6,1]

    >>>x.sort()

    >>>[1.3.4,5.6.7]

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

    >>>x = [4,1,5,6,9,8]

    >>>y = sorted(x)

    >>>x

    >>>[4,1,5,6,7]

    >>>y

    >>>[1,4,5,6,7]

    10.高级排序

    如果想把一些元素按照相反的顺序排序(而不是sort函数默认的方式,即根据python的默认排序规则按升序排列元素)

    sort方法有另外两个可选的参数---key和reverse,如果要使用它们,那么就要通过名字来指定(这叫做关键字参数)。参数key与参数cmp类似---必须提供一个在排序过程中使用的函数,然而,该函数并不是直接用来确定对象的大小,而是为每一个元素创建一个键,然后所有元素根据键来排序。因此要根据元素的长度进行排序,那么可以使用len作为键函数

    >>>a = ['abdagcaedadgadafadf','a12345','a','a4']

    >>>a.sort(key=len)

    >>>a

    >>>['a', 'a4', 'a12345', 'abdagcaedadgadafadf']

2.4 元组:不可变顺序

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

    2.4.1 tuple函数

    tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转换为元组。如果参数就是元组,那么该参数就会被原样返回:

    >>>tuple([1,2,3])

    >>>(1,2,3)

    >>>tuple('abc')

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

    >>>tuple((1,2,3))

    >>>(1,2,3)

2.5 总结

    让我们回顾本章所涵盖的一些重要的内容

    序列:序列是一种数据结构,他包含的元素都进行了编号,典型的序列包括列表,字符串和元组,其中。列表是可变的。而元组和字符串是不可变的。通过分片操作可以访问序列的一部分,其中分片需要两个索引号来支出分片的起始和结束为止。要想改变列表,则要对相应的位置进行赋值,或者使用赋值语句重写整个分片

    成员资格:in操作符可以检查一个值是否存在于序列中(或者其他的容器中)。对字符串使用in操作符是一个特例---它可以检查子字符串

    方法:一些内建函数---不过他们与特定值联系得更密切方法是面向对象编程的一个重要的概念,

2.5.1 本章的新函数

        函数                 描述

      cmp(x,y)              比较两个值

      len(seq)               返回序列的长度

      list(seq)               把序列转换为列表

      max(args)             返回序列或者参数集合中的最大值

      min(args)              返回序列或者参数集合中的最小值

      reversed(seq)            对序列进行反向迭代

      sorted(seq)              返回已排序的包含seq所有元素的列表

      tuple(seq)              把序列转换为元组

 

2.5.2 列表操作包含以下方法

    1、list.append(obj):在列表末尾添加新的对象

    2、list.count(obj):统计某个元素在列表中出现的次数

    3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

    4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置

    5、list.insert(index,obj):将对象插入列表

    6、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该值

    7、list.remove(obj):移除列表中某个值的第一个匹配项

    8、list.reverse():反向列表中元素

    9、list.sort([func]):对原列表进行排序