列表与元祖

本文详细介绍了列表和元组的基本操作。列表支持增、删、改、查,可以通过索引和切片进行访问,还可以使用内置方法如append、insert、remove等。元组作为不可变序列,只能进行查询操作,常用于数据结构的定义。
摘要由CSDN通过智能技术生成

列表

  当需要处理一组数据时,我们不可能用很多个变量去表示这些数据,这样处理起来很不方便,如

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)

返回目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值