python基础教程-第二章-列表和元组
本章将引入一个新的概念,:数据结构。数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构。在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基础教程-第二章-列表和元组的更多相关文章
- python基础教程总结1——列表和元组
1.序列 python含有6种内建序列——列表,元组,字符串,Unicode字符串,buffer对象,xrange对象 2.通用序列操作 2.1 索引 注: input()根据用户输入变换相应的类 ...
- Python 第二章-列表和元组
第二章-列表和元组 2.0 在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...
- 《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组
本章将引入一个新的概念:数据结构. 数据结构是通过某种方式阻止在一起的数据元素的集合,这些数据元素可以是数字或者字符,设置可以是其他数据结构. Python中,最基本的数据结构是序列(Sequence ...
- Python基础教程学习笔记:第二章 列表和元组
1.序列中元素的索引: 第一个元素索引是0,第二个是1,依次递增 最后一个元素索引是-1,倒数第二个是-2,依次递减 2.序列(Sequence)的种类: 列表(list).元组(tuple).字符串 ...
- Python基础教程 读书笔记(2)第二章 列表和元组
2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...
- 20190804-Python基础 第二章 列表和元组
容器,Python支持一种数据结构的基本概念(容器,基本上就是可包含其他对象的对象.) 两种主要的容器是:序列(如列表和元组)和映射(如字典) Ps: 列表与元组区别,列表可修改,元组不能. 对序列的 ...
- Python基础:序列(列表、元组)
一.概述 列表(list)是由一个个 Python对象 组成的序列.其中,Python对象 可以是任何类型的对象,包括 Python标准类型(数值.字符串.列表.元组和字典)以及 用户自定义类型(类) ...
- Day2 Python基础学习——字符串、列表、元组、字典、集合
Python中文学习大本营:http://www.pythondoc.com/ 一.字符串操作 一.用途:名字,性格,地址 name = 'wzs' #name = str('wzs')print(i ...
- Python基础(3)--列表和元组
Python包含6种内建序列:列表.元组.字符串.Unicode字符串.buffer对象.xrange对象 本篇主要讨论最常用的两种类型:列表.元组 本文地址:http://www.cnblogs.c ...
随机推荐
- javascript设计模式简介
- 关于xfce中桌面没法显示回收站以及thunar中无法进行卷管理的解决办法
出现这种问题的原因应该不是当前用户没在storage这个组里,因为我试过将用户从storage组里移除并不对影响桌面上回收站的显示. 问题的原因是没有安装gvfs这个软件,装上之后,重新登录当前用户, ...
- WORD基础快捷键
选择 Alt+Shift+上下 移动整行 Ctrl+上 移动到行首 Ctrl+Shift+上下 选择到行首尾 shift+del 删除整段 ...
- Openstack的keystone的user-role-list命令的使用
直接在shell模式下执行 [root@node-5 ~]# keystone user-role-list WARNING: Bypassing authentication using a tok ...
- Spark分析笔记
前言 第一章 Spark简介 本章将对Spark做一个介绍,以及它的一些基本概念 Spark是什么? Spark生态系统BDAS Spark架构 Spark分布式与单机多核架构的异同 Spark的企业 ...
- Dynamics AX 2012 R2 在AIF服务契约中使用DateTime
Reinhard在AIF中使用DateTime作为服务契约的参数,与DotNet程序进行交互时,总是因为时区的问题,导致DotNet提交的System.DateTime与AIF中接收的DateTime ...
- Mac下面的SecureCRT(附破解方案) 更新到最新的8.0.2
继续更新到8.0.2的破解,整体的破解方案都发生了的变化首先还是去 http://macabc.com/detail.htm?app_id=24 下载最新的8.0.2介于很多小白说替换之后说文件损坏, ...
- JuQueen(线段树 lazy)
JuQueen Time Limit: 5 Sec Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...
- AC自动机——Uva 11468 子串
题目链接:http://vjudge.net/contest/142513#problem/A 题意:给出一些字符和各自对应的选择概率,随机选择L次后将得到一个长度为L的随机字符串S.给出K个模版串, ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:排序、筛选和分页
这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第三篇:排序.筛选和分页 原文:Sort ...