列表
当需要处理一组数据时,我们不可能用很多个变量去表示这些数据,这样处理起来很不方便,如
name1 = 'zhangsan'
name2 = 'lisi'
name3 = 'wangwu'
... ...
这意味着我们需要一种新的数据类型去处理一组数据,这就接下来所说的列表。
如果学过C
语言或者其他的话,那么会发现python
的列表与其他语言的数组很相似,但是有不同的地方。
那么如何声明一个列表,如下
names = ['zhangsan','lisi','wangwu']
上面names
就是一个列表类型,一个列表用方括号([]
)给括起来,但是与其他语言数组不同的是,列表中的数据类型可以是不同的,在其他语言中,如果数组是整数类型,那么只能放整数类型的数据,但是在python
的列表中,可以放不同类型的数据。
下面介绍有关列表的一些操作,其实一般的操作也就那四种:增、删、改、查。
返回目录
查
通过下面的语法去查询列表中的元素:
print(names[1])
上面的程序是打印出列表names
的第二个元素,同其他语言一样,列表也是从0
开始计数的。
从上面就知道了如何去查询列表中的元素了,那就是列表名[index]
。
返回目录
切片
下面我要介绍一个比较重要的概念,那就是切片,如果你学过MATLAB
的话,那么你将会理解的很轻松,没学过也没有关系。什么是切片,这个概念我讲不清楚,但是给你看看例子体会一下:
print(names[0:2])
上面程序的意思是打印出names[0]
和names[1]
。
names[0:2]
就是切片,它表示names[0]~names[2]
的内容,但是只包括左边,不包括右边,也就是说,包括names[0]
,不包括names[2]
。
切片的完整表示应该如下:
names[初始index:终止index:步进长度step]
需要注意的是,不包括names[终止index]
,如果步长省略的话,默认为1
。比如names[0:5:2]
的初始位置是0
,结束位置是5
,步长为2
,即每两个选一个,所以names[0:5:2]
表示names[0],names[2],names[4]
。
比较需要注意的切片
names[0:] 表示从第一个取到最后一个,最后一个是可以取到的
names[0:-1] 表示从第一个取到倒数第一个(-1),倒数第一个是取不到的
names[-1::-1] 表示从倒数第一个开始,以-1(倒着数)取到第一个,可以取到第一个
上面需要注意的是,如果终止位置缺省的话,就是什么都不写,如names[0:]
和names[-1::-1]
,表示一直取下去,取完为止,所以可以取到最后一个和第一个,而在起始位置或者终止位置的-1
表示倒数第一个,在步长位置的-1
表示以步长为1
倒着数。那么这些位置的-2,-3
想必自己可以意会。
返回目录
增
向列表中添加新的元素有两种方法,一个是append()
,一个是insert()
。
append()
表示是向列表的最后添加一个元素,使用方法如下:
names = ['xiaoming','zhangsan','lisi','wangwu','xiaohong']
names.append('xiaogang')
print(names)
['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong', 'xiaogang']
可见,列表names
的最后插入了'xiaogang'
。
insert()
方法是插入的意思,它需要传入两个参数,一个是需要插入的位置,另一个是需要插入的内容。
比如insert(1,'xianggang')
表示向names[1]
插入'xiaogang'
,那么原来处于names[1]
的'zhangsan'
以及其后的都会往后移。具体如下:
names = ['xiaoming','zhangsan','lisi','wangwu','xiaohong']
names.insert(1,'xiaogang')
print(names)
['xiaoming', 'xiaogang', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
可见'xiaogang'
插入到了names[1]
的位置。
返回目录
改
改的话很简单,比如需要将names[1]
的内容改为'xiaoxia'
:
names[1] = 'xiaoxia'
也可以使用切片去改,如
names[1:3] = ['xiaowang','xiaohu']
但是使用切片时要两边的数目是一样,比如names[1:3]
表示的是names[1]
和names[2]
是2
个位置,如果只给它赋一个值的话,会产生意想不到的错误结果,如下:
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names[1:3] = ['xiaogang']
print(names)
names[1:3] = 'xiaogang'
print(names)
['xiaoming', 'xiaogang', 'wangwu', 'xiaohong']
['xiaoming', 'x', 'i', 'a', 'o', 'g', 'a', 'n', 'g', 'xiaohong']
以上两种结果都不是我们想要的,所以要正确的使用切片。
返回目录
删
列表的删除一个元素也有几种不同的方法,下面来一一介绍。
remove()
,它需要传入你要删除的内容,如下:
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.remove('zhangsan')
print(names)
['xiaoming', 'lisi', 'wangwu', 'xiaohong']
可见'zhangsan'
已经被删除了。
pop()
,它需要传入的是要删除的位置,并且返回该位置的内容。如下
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
name1 = names.pop(1)
print(name1)
print(names)
zhangsan
['xiaoming', 'lisi', 'wangwu', 'xiaohong']
del
,该方法不是列表的方法,该方法可以删除任何东西。
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
del names[1]
print(names)
['xiaoming', 'lisi', 'wangwu', 'xiaohong']
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
del names
print(names)
Traceback (most recent call last):
File "D:/PycharmProjects/Hello/Week1/Day1/list_display.py", line 10, in <module>
print(names)
NameError: name 'names' is not defined
del
方法是直接从内存中删除该对象,所以del names
表示直接将names
直接清除了,所以要打印names
时,编译器会表示names
没有被定义。
clear()
方法是将列表清空,即将列表里的所有元素都删除,但是该列表还在,只是一个元素都没有。
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.clear()
print(names)
[]
列表的其他内置方法
1.count()
该方法计算某元素出现的次数
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
print(names.count('xiaoming'))
1
2.reverse()
该方法表示将列表反转
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.reverse()
print(names)
['xiaohong', 'wangwu', 'lisi', 'zhangsan', 'xiaoming']
3.sort()
该方法表示将列表从小到大排序,如果是字符串的话,就按ASCII
码的大小进行排序,首先比较首字符,如果相同则比较第二个,依次下去:
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.sort()
print(names)
['lisi', 'wangwu', 'xiaohong', 'xiaoming', 'zhangsan']
如果想进行从大到小进行排序的话,可以配合resverse
实现:
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.sort(reverse = True)
print(names)
['zhangsan', 'xiaoming', 'xiaohong', 'wangwu', 'lisi']
4.extend()
该方法也表示向列表的最后增加元素,不过与append()
不同的是,append()
只能追加一个元素,而extend()
可以追加多个元素:
names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.extend(['xiaogang','xioahua'])
print(names)
['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong', 'xiaogang', 'xioahua']
元祖
元祖与列表很相似,也表示一组数据,列表的声明是用[]
,而元祖的声明是用()
a = (1,2,3,4)
print(a)
(1, 2, 3, 4)
元祖最大的特点就是,它只是可读的,也就是说,只能对它进行查询操作,其它的操作如增、改、删都是不可以的。其它的查询操作与列表是一样的,也可以使用切片。
a = (1,2,3,4);
print(a[0:3])
(1, 2, 3)