列表和元组
在本章中将会引入一个新的概念-----数据结构。数据结构呢就是通过某种方式(如对元素进行编号)组织在一起的数据元素的集合。这些元素可以是数字也可以是字符。
然而,在python中,最基本的数据结构就是序列。python包含6种内建序列,即列表,元组,字符串,Unicode字符串,buffer对象,xrange对象。
本章呢我们就先来讨论一下最常用的两种-----列表和元组。其他四种将会在近期为大家呈现,敬请期待!
在了解列表和元组之前呢,我们先来简单的了解一下序列的基本操作:索引,分片,序列相加,乘法,成员资格,长度,最小值,最大值 8种。这8种操作无论是在列表,元组还是其他几种内建序列中都可用。
序列:
1,索引:所谓索引简单的来说就是序列中的位置
eg:》name="Marie Dalgar"#定义变量name,并赋值
》print name[1] #根据编号取元素,使用格式:在括号中输入所取元素的编号值(注意python中元素下标也是从0始)
M
》print name[-1] #当括号中输入负数时,得到的值就会是倒是第一个元素(这叫做负数索引,不言而喻,上一种即正 r #数索引)
2,分片:索引用来对单个元素进行访问,那么分片就是通过冒号来对一段元素进行访问
eg:》number="Marie Dalgar"
》print number[1:3] #括号中所取得元素包前不包后,即会输出下标为1的元素和下标为2的元素,但不会输出下标为3的 ar #元素
》print number[-3:-1] #括号内输入负数时即取从下标倒数第三个元素到倒数第二个,但因为所取元素包前不包后怎么办?
ga
》print number[-3:] #从下标倒数第三个开始取直到最后一个,那么正数索引是否也可以这样呢?让我们来试试吧!
gar
》print number[3:] #从下标为3开始知道最后一个元素
ie Dalgar
》print number[:4] #从第一个开始到下标为4的元素
Mari
3,序列相加:使用加号可以将系列连接起来
eg:》name1="Marie"
》name2="Dalgar"
》print name1+name2 #加号就可将两个变量连接起来
MarieDalgar
4,乘法:这里的乘法不是数学中的乘法,而是使用“*”符号来代表乘一个数字num,表示将这一变量输出num次
eg:》H="hello "
》print H*3 # *3即输出三次
hello hello hello
5,成员资格:即用in判断某个元素是否存在于变量中
eg:》name="Marie"
》print "M" in name #判断"M"元素是否存在于name变量中(返回值为bool类型)
True
6,长度(变量的长度),最小值,最大值
eg:》number=[300,200,100,800,500]
》print len(number)#用方法len(变量名)得到变量的长度
5
》print min(number)#用方法min(变量名)得到变量中的最小值
200
》print miax(number)#用方法max(变量名)得到变量中的最大值
800
好了,讲了这么多序列的基本操作,都是为了给本章的主角列表,元组打基础,做准备,那么我们现在进入主题吧!
列表:
1,声明列表:
a,列表的定义:其实在上面介绍序列的最值时就有牵涉到列表的声明,这个列表呢就相当于一个数组,用来存储数据,容纳数据。
b,列表的声明:列表名=[值1,值2,值3......] eg:num=[1,2,3,4]
2,列表的操作
a,元素赋值
eg:>>>num=[1,2,3,4]
>>>num[1]=9
>>>print num
[1,9,3,4]
注意:这里的赋值只能是同一类型才可以赋值
b,元素的增加
这里元素的添加需要用到一个方法----append()
eg:>>>num=[1,2,3,4]
>>>num.append(5)
>>>print num
[1,2,3,4,5]
c,元素的删除
del 列表名[元素下标]
eg:>>>num=[1,2,3,4]
>>>print len(num)
4
>>>del num[1]
>>>print ("删除num[1]后:",num)
>>>print len(num)
删除num[1]后:[1,3,4]
3
注意:这里删除元素时不仅删除了元素而且还减少了列表的长度
d,分片赋值
分片赋值就是将一个str类型的列表每个字符拆分开来
eg:
>>>bo=list('女排得冠军了!')
>>>print bo
['女','排','得','冠','军','了']
>>>print bo[3:]=('man')
['女','排','得','m','a','n']
e,嵌套列表
eg:>>>num=[1,2,3]
>>>name=['luoruo','jila','jake']
>>>um=[num,name]
>>>um
[[1,2,3],['luoruo','jila','jake']]
>>>um[0]
[1,2,3]
>>>um[1]
['luoruo','jila','jake']
3,列表的方法
1)append()---添加元素(上面详细的列举过例子,这里就不解释)
2)count()----用于计算某一元素的个数
eg:>>>name=['angla','luoruo','angla']
>>>print name.count('angla')
2
3)extend()---用于序列后追加另一个序列中的全部值
eg:>>>name=['angla','luoruo','angla']
>>>sum=[1,4,3]
>>>name.extend(sum)
>>>print name
['angla','luoruo','angla',1,4,3]
注意:这种方法看似与序列相加结果没有什么区别,但!!!
当使用序列相加时,输出name时结果并没有改变
>>>name=['angla','luoruo','angla']
>>>sum=[1,4,3]
>>>name+sum
>>>print name
['angla','luoruo','angla']
当使用extend()方法时,输出的结果则变成了两序列相加后的结果
>>>name.extend(sum)
>>>print name
['angla','luoruo','angla',1,4,3]
4)index()---用于获取元素的下标
eg:
>>>num=[1,2,3,4]
>>>print num.index(1)
0
注意:这里的index()方法只能用于元素存在的情况下,如果查询的元素不存在就会报错
5)insert()---用于将对象插入列表
eg:
>>>name=['angla','luoruo','zhangsna']
>>>name.insert(2,'lisi')
>>>print name
['angla','luoruo','lisi','zhangsna']
6)pop()---用于移除列表中的某个元素(利用元素下标移除)
eg:>>>name=['angla','luoruo','zhangsna']
>>>name.pop()
>>>print name
['angla','luoruo']
当pop()方法括号内没有添加元素下标时,则是删除了列表的最后一个下标的元素
>>>name.pop(0)
>>>print name
['luoruo','zhangsna']
当pop()方法括号内有元素下标时则删除指定的下标的元素
注意:
pop()方法的移除实现规则其实与栈的出栈是一样的,移除时从最后一个元素开始
7)remove()----用于移除列表中的某个元素(利用元素的元素值匹配项来删除)
eg:>>>name=['angla','luoruo','zhangsna']
>>>name.remove('angla')
>>>print name
['luoruo','zhangsan']
8)reverse()---用于列表的反转
eg:>>>num=[1,2,3]
>>>num.reverse()
>>>print num
[3,2,1]
注意:这里的reverse()方法的使用不需要传入参数即可达到预想的效果
扩展:如果需要对一个列表进行反向迭代,那么可以使用reversed()函数,
但是这个函数并不返回列表,而是返回一个迭代器对象,可以通过list()函数把返回的对象转换为列表
eg:>>>num=[1,2,3]
>>>print list(reversed(num))
[3,2,1]
9)sort()---用于对序列进行排序,该方法可传入参数(使用参数指定的方法进行排序)也可不传(按照升序的规则进行排序)
eg:>>>num=[5,9,7,3,1]
>>>num.sort()
>>>print num
[1,3,5,7,9]
10)clear()---用于对序列进行删除,清理.
eg:>>>num=[1,2,3,4]
>>>print num
[1,2,3,4]
>>>num.clear()
>>>print num
[]
注意:clear()方法的清理会删除整个列表,所以在使用clear()方法时需要小心
11)copy()---用于复制序列
eg:>>>num=[1,2,3]
>>>copynum=num.copy()
>>>print copynum
[1,2,3]
该方法与其原本的意思一样,就是原原本本的将列表拷贝下来
12)高级排序---就是利用前面所说的sort()方法的基础上在括号里添加参数key和reverse,我们称这两个参数为关键字参数.
eg:>>>field=['study','python','is','happy']
>>>field.sort(key=len) #按字符串由短到长排序
>>>print field
['python','study','happy','is']
>>>field.sort(key=len,reverse=True) #按字符串由长到短的循序排列,需要传入两个参数
>>>print field
['is','study','happy','python']
>>>field.sort(reverse=True)
>>>print field
['is','happy','study','python']
好!现在说到这里呢!我们的列表基础知识就差不多讲解完了,接下来呢,我们就进入元组基础知识的讲解
元组:
元组是python的一个新的概念,主要是存放一组不可更改的序列,就以为只能查找,不能增删改,删只能全部删除,那么元组一般用来保存一组给用户查询的数据。一般存放坐标,物品信息,不经常修改的数据,比如返回值
1,语法:
元组名 = (元素1,元素2) 或者 元素1,元素2 (没打括号也认为是元组)
2,获取元素:
元组名[下标]
3,tuple函数---用于将列表转变为元组(如果加入的参数为元组,那么参数就会被原样返回)
eg:>>>print tuple(['hello','world'])
('hello','world')
>>>print tuple(('hello','world'))
('hello','world')
4,元组的基本操作
1) 访问元组---可以利用下标索引来访问元组中的值
eg:>>>mix=('hello','world',2015,2016)
>>>print mix[1]
world
>>>min=(1,2,3,4,5)
>>>print min[0:3]
1,2,3
2)修改元组---元组不可以修改元组值,但可以对元组进行连接组合
eg:>>>string=('hello','world')
>>>num=(2015,2016)
>>>print string+num
('hello','world',2015,2016)
3)删除元组---元组中的元素值是不能被删除的,但可以使用del语句删除整个元组
eg:>>>string=('hello','world')
>>>del string
>>>print string
Traceback(most recent call last):
注意:以上例子的元组被删除后,输出变量会有异常信息,输出结果告诉我们string没有定义,即元组不存在
4)元组索引,截取
因为元组也是一个序列,所以可以访问元组中指定位置的元素,也可以截取索引中的一段元素
eg:>>>name=('hello','world','welcome')
>>>print name[1]
'world'
>>>print name[1:]
('world','welcome')
5,元组的内置函数
1)len()方法---用于计算元组的长度
eg:>>>name=('lisi','zhangsan','wangwu')
>>>print len(name)
3
2)max()方法---用于返回元组中最大的元素
eg:>>>name=('lisi','zhangsan','wangwu')
>>>print max(name)
'zhangsan'
3)min()方法---用于返回元组中最小的元素
eg:>>>name=('lisi','zhangsan','wangwu')
>>>print min(name)
'lisi'
元组 和 列表的区别:
区别就在于元组的元素不能修改而列表的元素可以修改
上次我们讲到了序列的概念和序列的基本操作,那么接下来我们就进入主题-----列表
列表
1,声明列表:
a,列表的定义:其实在上面介绍序列的最值时就有牵涉到列表的声明,这个列表呢就相当于一个数组,用来存储数据,容纳数据。
b,列表的声明:列表名=[值1,值2,值3......] eg:num=[1,2,3,4]
2,列表的操作
a,元素赋值
eg:>>>num=[1,2,3,4]
>>>num[1]=9
>>>print num
[1,9,3,4]
注意:这里的赋值只能是同一类型才可以赋值
b,元素的增加
这里元素的添加需要用到一个方法----append()
eg:>>>num=[1,2,3,4]
>>>num.append(5)
>>>print num
[1,2,3,4,5]
c,元素的删除
del 列表名[元素下标]
eg:>>>num=[1,2,3,4]
>>>print len(num)
4
>>>del num[1]
>>>print ("删除num[1]后:",num)
>>>print len(num)
删除num[1]后:[1,3,4]
3
注意:这里删除元素时不仅删除了元素而且还减少了列表的长度
d,分片赋值
分片赋值就是将一个str类型的列表每个字符拆分开来
eg:
>>>bo=list('女排得冠军了!')
>>>print bo
['女','排','得','冠','军','了']
>>>print bo[3:]=('man')
['女','排','得','m','a','n']
e,嵌套列表
eg:>>>num=[1,2,3]
>>>name=['luoruo','jila','jake']
>>>um=[num,name]
>>>um
[[1,2,3],['luoruo','jila','jake']]
>>>um[0]
[1,2,3]
>>>um[1]
['luoruo','jila','jake']
3,列表的方法
1)append()---添加元素(上面详细的列举过例子,这里就不解释)
2)count()----用于计算某一元素的个数
eg:>>>name=['angla','luoruo','angla']
>>>print name.count('angla')
2
3)extend()---用于序列后追加另一个序列中的全部值
eg:>>>name=['angla','luoruo','angla']
>>>sum=[1,4,3]
>>>name.extend(sum)
>>>print name
['angla','luoruo','angla',1,4,3]
注意:这种方法看似与序列相加结果没有什么区别,但!!!
当使用序列相加时,输出name时结果并没有改变
>>>name=['angla','luoruo','angla']
>>>sum=[1,4,3]
>>>name+sum
>>>print name
['angla','luoruo','angla']
当使用extend()方法时,输出的结果则变成了两序列相加后的结果
>>>name.extend(sum)
>>>print name
['angla','luoruo','angla',1,4,3]
4)index()---用于获取元素的下标
eg:
>>>num=[1,2,3,4]
>>>print num.index(1)
0
注意:这里的index()方法只能用于元素存在的情况下,如果查询的元素不存在就会报错
5)insert()---用于将对象插入列表
eg:
>>>name=['angla','luoruo','zhangsna']
>>>name.insert(2,'lisi')
>>>print name
['angla','luoruo','lisi','zhangsna']
6)pop()---用于移除列表中的某个元素(利用元素下标移除)
eg:>>>name=['angla','luoruo','zhangsna']
>>>name.pop()
>>>print name
['angla','luoruo']
当pop()方法括号内没有添加元素下标时,则是删除了列表的最后一个下标的元素
>>>name.pop(0)
>>>print name
['luoruo','zhangsna']
当pop()方法括号内有元素下标时则删除指定的下标的元素
注意:
pop()方法的移除实现规则其实与栈的出栈是一样的,移除时从最后一个元素开始
7)remove()----用于移除列表中的某个元素(利用元素的元素值匹配项来删除)
eg:>>>name=['angla','luoruo','zhangsna']
>>>name.remove('angla')
>>>print name
['luoruo','zhangsan']
8)reverse()---用于列表的反转
eg:>>>num=[1,2,3]
>>>num.reverse()
>>>print num
[3,2,1]
注意:这里的reverse()方法的使用不需要传入参数即可达到预想的效果
扩展:如果需要对一个列表进行反向迭代,那么可以使用reversed()函数,
但是这个函数并不返回列表,而是返回一个迭代器对象,可以通过list()函数把返回的对象转换为列表
eg:>>>num=[1,2,3]
>>>print list(reversed(num))
[3,2,1]
9)sort()---用于对序列进行排序,该方法可传入参数(使用参数指定的方法进行排序)也可不传(按照升序的规则进行排序)
eg:>>>num=[5,9,7,3,1]
>>>num.sort()
>>>print num
[1,3,5,7,9]
10)clear()---用于对序列进行删除,清理.
eg:>>>num=[1,2,3,4]
>>>print num
[1,2,3,4]
>>>num.clear()
>>>print num
[]
注意:clear()方法的清理会删除整个列表,所以在使用clear()方法时需要小心
11)copy()---用于复制序列
eg:>>>num=[1,2,3]
>>>copynum=num.copy()
>>>print copynum
[1,2,3]
该方法与其原本的意思一样,就是原原本本的将列表拷贝下来
12)高级排序---就是利用前面所说的sort()方法的基础上在括号里添加参数key和reverse,我们称这两个参数为关键字参数.
eg:>>>field=['study','python','is','happy']
>>>field.sort(key=len) #按字符串由短到长排序
>>>print field
['python','study','happy','is']
>>>field.sort(key=len,reverse=True) #按字符串由长到短的循序排列,需要传入两个参数
>>>print field
['is','study','happy','python']
>>>field.sort(reverse=True)
>>>print field
['is','happy','study','python']
好!现在说到这里呢!我们的列表基础知识就差不多讲解完了,接下来呢,我们就进入元组基础知识的讲解
元组
1,元组定义:Python的元组与列表类似,不同之处是元组的元素是不可修改的(字符串也是不能修改的)
2,元组的声明:声明元组的方法很简单,只要使用逗号分隔一些值就可以自动创建元组
eg:>>>print 1,2,3
(1,2,3)
>>>print (1,2,3) #也可以直接创建一个元组
(1,2,3)
>>>print () #也允许创建空的元组
()
3,tuple函数---用于将列表转变为元组(如果加入的参数为元组,那么参数就会被原样返回)
eg:>>>print tuple(['hello','world'])
('hello','world')
>>>print tuple(('hello','world'))
('hello','world')
4,元组的基本操作
1) 访问元组---可以利用下标索引来访问元组中的值
eg:>>>mix=('hello','world',2015,2016)
>>>print mix[1]
world
>>>min=(1,2,3,4,5)
>>>print min[0:3]
1,2,3
2)修改元组---元组不可以修改元组值,但可以对元组进行连接组合
eg:>>>string=('hello','world')
>>>num=(2015,2016)
>>>print string+num
('hello','world',2015,2016)
3)删除元组---元组中的元素值是不能被删除的,但可以使用del语句删除整个元组
eg:>>>string=('hello','world')
>>>del string
>>>print string
Traceback(most recent call last):
注意:以上例子的元组被删除后,输出变量会有异常信息,输出结果告诉我们string没有定义,即元组不存在
4)元组索引,截取
因为元组也是一个序列,所以可以访问元组中指定位置的元素,也可以截取索引中的一段元素
eg:>>>name=('hello','world','welcome')
>>>print name[1]
'world'
>>>print name[1:]
('world','welcome')
5,元组的内置函数
1)len()方法---用于计算元组的长度
eg:>>>name=('lisi','zhangsan','wangwu')
>>>print len(name)
3
2)max()方法---用于返回元组中最大的元素
eg:>>>name=('lisi','zhangsan','wangwu')
>>>print max(name)
'zhangsan'
3)min()方法---用于返回元组中最小的元素
eg:>>>name=('lisi','zhangsan','wangwu')
>>>print min(name)
'lisi'
元组 和 列表的区别:区别就在于元组的元素不能修改而列表的元素可以修改