本章将引入一个新的概念,:数据结构。数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构。在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]):对原列表进行排序

   

python基础教程-第二章-列表和元组的更多相关文章

  1. python基础教程总结1——列表和元组

    1.序列 python含有6种内建序列——列表,元组,字符串,Unicode字符串,buffer对象,xrange对象 2.通用序列操作 2.1 索引 注:   input()根据用户输入变换相应的类 ...

  2. Python 第二章-列表和元组

    第二章-列表和元组 2.0      在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...

  3. 《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组

    本章将引入一个新的概念:数据结构. 数据结构是通过某种方式阻止在一起的数据元素的集合,这些数据元素可以是数字或者字符,设置可以是其他数据结构. Python中,最基本的数据结构是序列(Sequence ...

  4. Python基础教程学习笔记:第二章 列表和元组

    1.序列中元素的索引: 第一个元素索引是0,第二个是1,依次递增 最后一个元素索引是-1,倒数第二个是-2,依次递减 2.序列(Sequence)的种类: 列表(list).元组(tuple).字符串 ...

  5. Python基础教程 读书笔记(2)第二章 列表和元组

    2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...

  6. 20190804-Python基础 第二章 列表和元组

    容器,Python支持一种数据结构的基本概念(容器,基本上就是可包含其他对象的对象.) 两种主要的容器是:序列(如列表和元组)和映射(如字典) Ps: 列表与元组区别,列表可修改,元组不能. 对序列的 ...

  7. Python基础:序列(列表、元组)

    一.概述 列表(list)是由一个个 Python对象 组成的序列.其中,Python对象 可以是任何类型的对象,包括 Python标准类型(数值.字符串.列表.元组和字典)以及 用户自定义类型(类) ...

  8. Day2 Python基础学习——字符串、列表、元组、字典、集合

    Python中文学习大本营:http://www.pythondoc.com/ 一.字符串操作 一.用途:名字,性格,地址 name = 'wzs' #name = str('wzs')print(i ...

  9. Python基础(3)--列表和元组

    Python包含6种内建序列:列表.元组.字符串.Unicode字符串.buffer对象.xrange对象 本篇主要讨论最常用的两种类型:列表.元组 本文地址:http://www.cnblogs.c ...

随机推荐

  1. C语言回顾-运算符和循环

    1.运算符 连接操作数,构成表达式 按功能划分: 1)算术运算符 + - *  / % 2)关系运算符 3)逻辑运算符 4)按位运算符 按操作数划分: 1)单目运算符 2)双目运算符 3)三目运算符 ...

  2. InnerJoin分页导致的数据重复问题排查

    2016年8月9号美好的七夕的早上,我精神抖擞地来到公司.一会之后,客服宅宅MM微信我,说一个VIP大店铺订单导出报表中一个订单有重复行.于是,我赶紧开始查探问题所在.经过一天的反复仔细追查(当然还包 ...

  3. TextBox

    一.聚焦: private void FrmOnlineChargeMoney_Paint(object sender, PaintEventArgs e) { edtAuthCode.SelectA ...

  4. RunTime的一些用法

    RunTime的一些用法   RunTime简介 RunTime简称运行时.OC就是运行时机制,其中最主要的是消息机制 对于OC来说,在编译的时候并不能决定真正调用哪个函数,只有真正运行时才会根据函数 ...

  5. Mac下安装LNMP(Nginx+PHP5.6)环境

    [转自:http://avnpc.com/pages/install-lnmp-on-osx] 安装Homebrew 最近工作环境切换到Mac,所以以OS X Yosemite(10.10.1)为例, ...

  6. mysql分区表的原理和优缺点

    1.分区表的原理 分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分 ...

  7. oracle物化视图

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询. 这样对整 ...

  8. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

  9. 【HDU5955】Guessing the Dice Roll/马尔科夫

    先从阿里机器学习算法岗网络笔试题说起:甲乙两人进行一个猜硬币的游戏.每个人有一个目标序列,由裁判来抛硬币.谁先得到裁判抛出的一串连续结果,谁赢. 甲的目标序列是正正正,乙的目标序列是反正正.那么如果裁 ...

  10. jQuery的环境配置

    目前最新的版本,是 1.10.1 和 2.0.2,如果你需要引用到你线上的项目,就必须使用压缩版,去掉了注释和空白,是容量最小. 从CDN中载入JQuery,如Google中载入JQuery: htt ...