Python学习之列表、元祖及其操作08

1.列表

现在假设需要存储一些数据,比如一些名字,并且做一定的操作,那么要怎么办,考虑如下代码:

name1 = 'xiaoming'
name2 = 'zhangsan'
name3 = 'lisi'
name4 = 'wangwu'
name5 = 'xiaohong'

 虽然这样存储了名字的信息,但是对这些名字做操作实在是很不方便,于是Python里面有一种新的数据类型,可以方便的对这些数据进行组织,并且有许多的方法进行数据操作。

这个数据类型就叫做列表,考虑以下代码:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
print(names)
['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']

以上就是创建列表的过程,names就是一个列表,下面介绍进行列表操作的一些方法。

2.列表操作

查:  

列表查的方法特别简单,就是names[index]的形式,观察以下代码:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
print(names[1])
zhangsan

 这里需要注意的是,下标是从0开始的,就是说names[0] = 'xiaoming' , names[1] = 'zhangsan', ...

切片 :

假设我要查'zhangsan'和'lisi'怎么办?可以用切片实现:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
print(names[1:3])
['zhangsan', 'lisi']

 names[1:3]就是切片,意思是从names[1]取到names[3],但是注意是不包括names[3]的。下面介绍一些其他表达的切片,观察以下代码:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
print(names[1:])
print(names[0:-1])
print(names[0::2])
print(names[4::-1])
print(names[-1::-1])
['zhangsan', 'lisi', 'wangwu', 'xiaohong']
['xiaoming', 'zhangsan', 'lisi', 'wangwu']
['xiaoming', 'lisi', 'xiaohong']
['xiaohong', 'wangwu', 'lisi', 'zhangsan', 'xiaoming']
['xiaohong', 'wangwu', 'lisi', 'zhangsan', 'xiaoming']

 首先,names[1:]表示的是从下标1开始取到最后一个;names[0:-1],-1的意思的最后一个,所以这个的意思是从下标1取到最后一个,但是不包含最后一个;names[0::2],这个表示从下标0开始以每隔2个取一次取到最后;names[4::-1],这个的意思是从下标4开始倒着取到最开始,这里-1的意思是倒着每隔一个取一个,如果想倒着每隔两个取一个可以写成-2,依次类推;names[-1::-1]的意思是从倒数第一个倒着每隔一个取一次取到开始。

 

增:

第一个方法append(),在末尾增加一个元素,如下:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.append('xiaogang')
print(names)
['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong', 'xiaogang']

 第二个方法insert(),在指定下标位置插入一个元素,如下:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.insert(1,'xiaogang')
print(names)
['xiaoming', 'xiaogang', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']

 在位置为1的位置插入了'xiaogang'。

 

改:

改的方法特别的简单,就是取出要改元素的下标,然后赋别的值,如下:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names[1] = 'xiaogang'
print(names)
['xiaoming', 'xiaogang', 'lisi', 'wangwu', 'xiaohong']

如上,'zhangsan'已经被改为了'xiaogang',如果同时想改'zhangsan'和'lisi'的话,可以用切片的方式实现,如下:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names[1:3] = ['xiaogang','xiaohua']
print(names)
['xiaoming', 'xiaogang', 'xiaohua', 'wangwu', 'xiaohong']

'zhangsan'和'lisi'已经被修改成了'xiaogang'和'xiaohua'。

使用切片要小心,左右两边元素的数目要对上,比如下面这种情况:

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']

那么remove()可以同时删除多个元素吗?考虑以下代码:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
names.remove(['zhangsan','lisi'])
print(names)
Traceback (most recent call last):
  File "D:/PycharmProjects/Hello/Week1/Day1/list_display.py", line 9, in <module>
    names.remove(['zhangsan','lisi'])
ValueError: list.remove(x): x not in list

程序报了一个错误,说['zhangsan','lisi']不在列表中,这个是什么意思呢?考虑以下代码:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong',['zhangsan','lisi']]
names.remove(['zhangsan','lisi'])
print(names)
['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']

 不知道大家意会出没有,由此可见,remove()只能删除一个元素的。

第二个方法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是彻彻底底的删除,直接在内存删除这个对象,而不是清空,所以第二个程序直接说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']

如果要进行从大到小排序呢?可以用sort(reverse = True),如下:

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']

其他操作

比如想知道某元素是否在列表中,考虑下面两种方式:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
print(names.count('xiaogang'))
print('xiaogang' in names)
0
False

这两种方法都是可以的,我更喜欢第二个。

 

有的时候想知道names是不是列表,如果是的话就可以执行某种操作。判断names是不是列表的方法如下:

names = ['xiaoming', 'zhangsan', 'lisi', 'wangwu', 'xiaohong']
print(type(names) is list)
True

3.元祖

元祖有称为可读列表,它与列表很像,但是它只能读,它的创建方法如下所示

a = (1,2,3,4)
print(a)
(1, 2, 3, 4)

 对于元祖也可以使用切片的方式去查询。

猜你喜欢

转载自blog.csdn.net/The_last_knight/article/details/82918305