python基础之列表和元组

1.寻列概述

Python中最基本的数据结构就是序列(sequence),序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个元素索引为0,第二个为1,一次类推。


python中包含六种内建序列,下面我们将着重讨论最常用的两种:列表和元组。其他的内建序列类型有:字符串,Unicode字符串,buffer对象和xrange对象。


列表和元组的主要区别在于:列表可以修改,元组不能修改.在需要操作一组数值的时候,序列很好用。可以用序列表示数据库中一个人的信息,例如:

>>> edward=['John',42]
>>> sun=['sun',22]

>>> database=[edward,sun]
>>> database
[['John', 42], ['sun', 22]]

注意:python中还有一种数据结构叫做容器(container),容器基本上是包含其他对象的任意对象。序列和映射是两类主要的容器。还有一种容器就是集合。以后我们会经行详细的介绍。


2.通用序列的操作

所有的序列都可以经行某些特定的操作。这些操作包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列、计算序列长度、找出最大元素和最小元素。注意:序列还有一个重要操作就是迭代(依次对序列中的某个元素的操作执行某些重复动作),在以后我们会做详细介绍。


(1)索引

序列中所有元素都是有编号的——从0开始。这些元素可以通过编号访问而得。例如:

>>> a="123"
>>> a[2]
'3'

(字符串本身就是一个序列)

这就是索引。可以通过索引获取到所有的元素。使用负数索引时,python会从右边开始计数:

>>> a[-1]
'3'

字符串的字面值可以直接使用索引,而不需要用一个变量引用他们:

>>> 'hello'[3]
'l'


(2)分片

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

>>> a="123456789"
>>> a[2:5]
'345'

注意:第一个索引是需要获取的第一个元素的编号,第二个索引是需要获取的最后一个元素的下一个元素的编号(也就是获取到的片段包括第一个索引,不包括第二个索引,截止到第二个索引)

一.优雅的捷径

例如需要访问最后三位元素:

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

>>> a[7:10]
[8, 9, 10]

现在,索引10指向的是第十一个元素,但是这个元素并不存在,却是在最后一个需要截取的元素之后。明白了吗?

可是,如果需要从列表的结尾开始计数呢?

>>> a[-3:-1]
[8, 9]
>>> a[-3:0]
[ ]

显然,这不是我们需要的结果,所以,如果我们需要分片中包含序列的结尾元素,只需置空最后一个索引即可:

>>> a[-3:]
[8, 9, 10]

那么,如果需要复制整个序列,那么,可以将两个索引都置空:

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

二.更大的步长

在进行分片的时候,分片的开始和结束都需要指定。而另外一个参数——步长(step length)——通常都是隐式设置的。在普通分片中,步长是1——分片操作就是按照这个步长逐步遍历序列的元素,然后返回开始和结束点之间的所有元素。

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

这个例子中,分片包含了另外一个数字,就是步长的显示设置。如果步长设置的比1大,那么就会跳过某些元素。例如步长为2的分片包括的是从开始到结束每隔一个的元素:

>>> a[0:10:2]
[1, 3, 5, 7, 9]

之前提到的捷径也可以使用:

>>> a[::4]
[1, 5, 9]
当然,步长不能为0(那不会执行),但是可以为负数,此时分片从右刀俎提取元素:

>>> a[::-2]
[10, 8, 6, 4, 2]


(3)序列相加

使用加运算符可以对序列经行链接操作:

>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'abc'+'efg'
'abcefg'
>>> [1,2,3]+['a','b','c']
[1, 2, 3, 'a', 'b', 'c']
>>> [1,2,3]+'asd'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

两种相同的序列才可以经行链接。


(4)乘法

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

>>> 'hello '*5
'hello hello hello hello hello '
>>> [1,2]*5
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

None、空列表和初始化

空列表可以简单的通过[](两个中括号)表示,里面什么都没有。但是如果想创建一个占有十个元素的空间,但是里面什么也没有。这时候就需要一个值来代表空值。Python中使用None(注意None开头需要大写)来表示空值。None是Python的一个内建值。如果想初始化一个长度为10的空列表,可以这样:

>>> [None]*10
[None, None, None, None, None, None, None, None, None, None]


(5)成员资格

为了检查一个值是否在序列中,我们可以使用in运算符,并且返回一个bool值:

>>> a=[1,2,3,'a']
>>> 'a' in a
True
>>> 1 in a
True

下面为一个检查用户名/PIN码的例子:

database=[
['a','1'],
['b','2'],
['c','3']
]
username=raw_input('User name:')
pin=raw_input('pin:')
if [username,pin] in database:print 'ok'

输出为:

User name:b
pin:2
ok


(6)长度、最小值、最大值

内建函数len、max、min函数分别用来获取序列中的长度最小值和最大值:

>>> num=[100,5,36]
>>> len(num)
3
>>> max(num)
100
>>> min(num)
5

注意:min和max函数的参数并不是序列,而是多个数字直接为参数。


二.列表:Python的苦力

(1)list函数

list函数用来根据字符串创建列表:

>>> list('hello word')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'd']


(2)列表的基本操作

1.改变列表:元素赋值

改变列表中的元素只需要根据索引找到相应元素直接赋值即可:

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

2.删除元素

删除元素也很简单,只需要用del语句删除就行:

>>> del x[2]
>>> x
[1, 2]

3.分片赋值

分片赋值功能非常强大,一次可以改变多个值,甚至可以使用和原序列不同长度的分片替换:

>>> name=list("Perl")
>>> name
['P', 'e', 'r', 'l']
>>> name[1:]=list('aaa')
>>> name
['P', 'a', 'a', 'a']
>>> name[1:]=list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']

分片赋值可以实现插入操作:

>>> a=[1,5]
>>> a[1:1]=[2,3,4]
>>> a
[1, 2, 3, 4, 5]

类此,分片赋值还可以进行删除操作(把分片替换为空)

>>> a[1:4]=[]
>>> a
[1, 5]


(3)列表的方法

方法是一个与某对象有着密切联系的函数,对象可能是任何类型.一般来说方法可以这样调用:

对象.方法(参数)

后面将对方法进行更详细的解释。

1.append

append方法用户在队列末尾追加元素

>>> a=[1,2,3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]


2.count

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

>>> a=[1,1,2,3]
>>> a.count(1)
2
>>> a=[1,1,[1,[1,2]],2,3]
>>> a.count(1)
2


3.extend

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

>>> a=[1,2,3]
>>> b=[4,5,6]

>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]



4.index

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

>>> a=['we','are','the','one']
>>> a.index('the')
2


5.insert

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

>>> a.insert(3,"not")
>>> a
['we', 'are', 'the', 'not', 'one']


6.pop

pop方法会移除列表中最后一个元素,并且返回该值:

>>> a=[1,2,3]
>>> a.pop()
3
>>> a
[1, 2]

注意:pop方法是唯一一个既能修改列表又能返回元素值(除了None)的列表方法。


7.remove

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

>>> a=[1,2,3,1,]
>>> a.remove(1)
>>> a
[2, 3, 1]


8.reverse

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

>>> a=[1,2,3,4]
>>> a.reverse()
>>> a
[4, 3, 2, 1]


9.sort

sort方法用户改变原来的列表,并且让其按照一定的顺序排列,注意:方法本身无返回值,只改变这个列表本身。

>>> a=[2,1,5,4,3]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]


10.高级排序

如果希望元素能够按照特定的顺序排序,那么可以通过compare(x,y)的形式自定义比较函数。定义好函数后就可以提供给sort()方法作为参数了,内建函数cmp提供了比较函数的默认实现方式:

>>> a=[5,2,9,7]
>>> a.sort(cmp)
>>> a
[2, 5, 7, 9]

sort方法有另外两个可选的参数——key和reverse。如果要使用它们,就要通过名字来指定(这叫做关键字参数,以后会详细的讲到),参数key与参数cmp相似——必须提供一个在排序过程中使用的函数,然后,这个函数并不是直接确定对象的大小,而是为每个元素创建一个键,然后所有元素根据键来排序。例如,我们需要根据元素的长度来排序,可以使用len函数:

>>> a=['123','a','asdd']
>>> a.sort(key=len)
>>> a
['a', '123', 'asdd']

另外一个关键字reverse是用来指定元素是否需要进行反向排序:

>>> a=[2,3,1,4,6]
>>> a.sort(reverse=True)
>>> a
[6, 4, 3, 2, 1]


三.元组:不可变序列

元组和列表一样,也是一种序列。唯一的不同是元组不能修改,和字符串类似。创建元组很简单,如果你用逗号分隔了一些值,那么就自动创建了元组:

>>> a=1,2,3
>>> a
(1, 2, 3)

元组大部分时候是通过圆括号括起来的,空元组用一个空圆括号表示:

>>> a=()
>>> a
()

如果要实现一个值得元组,就在这个值后加逗号,即使逗号后为空:

>>> 4,
(4,)


tuple函数

tuple函数和list函数基本一样,以一个序列作为参数,返回它的元组:

>>> tuple("123")
('1', '2', '3')


元组的操作和列表的基本一样,元组的分片还是元组,就像列表的分片还是列表一样。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值