oXiaoChong 2020-06-01
我们之前学过c语言的同学都知道一个数据类型叫做数组,但是数组有一个硬性的要求,就是数组内的数据类型必须一致,但由于python没有数据类型,所以python便加入了一个强大的列表,并且几乎可以向里注入任何类型的元素。
列表的创建其实很简单,只需要定义一个列表变量然后将任何数据通过 "[ ] "的形式括起来赋给变量就可以了,像这样。
# 这个列表内只有数字 list1 = [1, 2, 3, 4, 5] # 但这个列表内有多种类型,有数字,字符串,甚至还可以是一个列表 list2 = [1, 2, 3, "Hopes", [1, 2, 3]] # 当然,也可以先建一个空列表,以便以后对它进行操作 empty = []
将这段代码录入到pycharm,然后运行一下试试。
列表是可操作的,并且操作起来十分灵活,并且在以后的学习中列表也是不可或缺的部分,列表常用的操作包括:元素的添加,删除,获取,修改,查询。。。并且列表还有很多的BIF也就是方法,下面我们一一介绍.
如果我们想要向列表中添加一个元素,我们就会用到一个BIF----append()方法
# 首先定义一个列表,并赋初始元素值 number = [1, 2, 3, 4] # 用append方法向其添加元素 number.append(5) # 打印输出 print(number)
结果:
[1, 2, 3, 4, 5]
我们之前讲到过一个叫做BIF的东西,我们说过它是python的内置方法,可以直接调用,在这里我们可以看出,方法可以直接通过 " .BIF() "的方式调用。但是我们会发现,并不能通过append方法同时添加多个元素,不妨试一下如果加入多个元素会不会出错:
number = [1, 2, 3, 4] number.append(5, 6)
试过了没有?是不是报错了这样的内容:
TypeError: appen() takes exactly one argument( 2 given)
意思是append方法只能传入一个值,而这里传入了两个,所以肯定会报错。
那我们如果想要一次性加入多个元素呢?当然是有办法的,这里我们就用到了一个extend方法,extend即为拓展的意思,不同于append添加,它可以将一个列表拓展进另一个列表,什么意思呢?看下面的代码:
number = [1, 2, 3, 4] number.extend([5, 6, 7]) print(number)
运行一下,结果:
[1 ,2 , 3, 4, 5, 6, 7]
是不是将列表[5, 6, 7]拓展进了列表[1, 2, 3, 4]中,但是一定要记住,extend内只能是一个列表,而不能是单独的元素,否则也会报错。
number.extend(5, 6, 7) # 错误 number.extend([5, 6, 7]) # 正确
但是这两个添加都存在一个问题:我们只能向整个列表的后面添加,但是如果我想向某个位置插入一个元素该怎么办?这里我们再介绍一个向列表中插入元素的方法:insert方法。
number = [0, 1, 3, 4, 5, 6] number.insert(3, 2) print(number)
结果:
[0, 1, 2, 3, 4, 5, 6]
是不是将3插入到第2个元素的位置了呢?你如果问:第二个?我数着是第三个啊?。。。那你可就要注意了,所以有的机器语言中,都是从0开始数的,再数一遍,是不是第二个了?所以,insert()中可传入两个参数,insert(3, 2) .3代表要插入的元素,2代表要插入的位置,是不是很简单,还是录入代码尝试一下吧。
在python列表中的每个元素,都有着属于自己的索引值,这个索引值就相当于每个班级学生的序号,相互之间一一对应,那么所以说,我们就可以通过索引的方式来获取我们需要的某个位置上的元素,如下:
# 定义一个列表,里面放着四个同学的名字 name = ["Hopes", "Alex", "Demo", "Harry"] # 我们想要序号为1的同学的名字 stu1 = name[1] print(stu1) # 接着是序号为3的同学的名字 stu3 = name[3] print(stu3)
结果:
Alex Harry
是不是很easy,只需要在列表变量名后的" [ ] "内输入你想提取出来的元素的序号,就可以获取相应的元素。
但是有同学会问,如果我知道序号想提取序号对应的元素可以用这种方式,那么如果我知道某个元素的内容,是不是也可以得到它的位置呢?答案是肯定的,python是不会放过任何的细节的,接下来我们了解一下是怎样获取索引值的。
如果我们想要得到某个元素的索引值,或者说是它的位置,我们就需要用到另一个BIF,即index方法,index本身就就是索引的意思,所以这里理所当然的也由它承担这份责任,我们来看一下是怎样使用的吧。
# 同样定义一个包含四个名字的列表 name = ["Hopes", "Alex", "Demo", "Harry"] # 获取"Hopes"同学的位置 loc1 = name.index("Hopes") print(loc1) # 获取"Demo"同学的位置 loc2 = name.index("Demo") print(loc2)
结果:
0 2
怎么样,很简单吧,录入一下代码试试吧。
既然我们已经学会了元素的获取,那么理解元素的替换并不难,因为如果我们要替换某个元素,就必须先获取到它,所以元素的替换其实也相当于一个元素的重新“赋值”,看看下面的例子吧。
name = ["Hopes", "Alex", "Demo", "Harry"] # 我们将Alex同学替换成Faker同学 name[1] = "Faker" # 然后将Harry同学替换成Uzi同学 name[3] = Uzi # 打印输出 print(name)
结果:
["Hopes", "Faker", "Demo", "Uzi"]
同样录入试一下,学习任何一门编程语言都需要不断地去尝试去修改,只要坚持不懈,终有一天可以成为python编程的大牛。
我们已经学习了元素的添加,获取,修改,最后我们学习一下关于元素的删除,同样我们介绍常见的删除元素的三种方法----remove(),del和pop()。
比如我们先学习使用remove方式删除元素:
# 创建一个动物列表 animal = ["mokey", "elephent", "tiger", "snake"] # 删除列表中的tiger animal.remove("tiger") print(animal)
结果:
["mokey", "elepent", "snake"]
可以看到,tiger确实是被删除了,利用remove方式并不需要知道某个元素的具体位置,只要知道元素的内容就可以了,如果删除一个不存在的元素呢?你可以试试,它肯定会报错的,像这样:
ValueError: list.(x): x not in list
另外如果我只知道某个元素的位置呢?怎么删除?首先你可以这样。
animal = ["mokey", "elephent", "tiger", "snake"] # 删除位置为1的元素 animal.remove(animal[1]) print(animal)
很显然,这样是肯定可行的,因为animal[1]就是位置为1的元素的内容,但是这样确实有点麻烦啊,python不是以简单明了而著称的吗?没错,python是绝对不会忘记这点的,所以下面我们尝试使用del来删除某个特定位置的元素。
animal = ["mokey", "elephent", "tiger", "snake"] # 删除第0个元素 del animal[0] print(animal)
结果:
["elephent", "tiger", "snake"]
是不是成功的删除了?但是你会发现为什么之前用的.remove()方法是放在animal后面且可以传入一个参数,儿del直接放在animal之前了呢?因为del并不是一个list的方法,而是一个语句,如果你想要删除整个列表,可以通过del加列表名来实现
animal = ["mokey", "elephent", "tiger", "snake"] # 删除animal列表 del animal print(animal)
结果:
NameError: name ‘animal‘ is not defined
是不是报错了,这也就意味着我们已经删除了animal这个列表。
然后,我们再来介绍一下pop()的删除方式,这个其实挺有意思的,因为它是“弹出”式的删除,并且,如果pop()不指定参数,它会默认删除最后位置的元素,还可以制定某个位置来弹出,先看一下例子。
animal = ["mokey", "elephent", "tiger", "snake"] # 弹出默认位置 animal.pop() print(animal) # 弹出第1个元素 animal.pop(1) print(animal)
结果:
["mokey", "elephent", "tiger"] ["mokey", "tiger"]
但为什么说它是“弹出”呢?再看下面的代码。
animal = ["mokey", "elephent", "tiger", "snake"] # 弹出默认位置 print(animal.pop()) print(animal) # 弹出第1个元素 print(animal.pop(1)) print(animal)
结果:
snake ["mokey", "elephent", "tiger"] elephent ["mokey", "tiger"]
所以看到没有,为什么叫“弹出”?因为它在删除的过程中会给你返回一个要“弹出”的元素,这样我们就可以知道我们具体删除的是哪个元素了,很方便有没有,录入代码自己尝试一下吧。
我们想到利用索引值可以取出我们需要的元素,但是我们如果要一次性获取多个元素呢?这又是一个问题,但是这难不倒我们,道高一尺魔高一丈,python可以满足你的任何需求。这里我们用列表的切片来演示一下一次性多个元素的获取。
animal = ["mokey", "elephent", "tiger", "snake"] # 获取第0个到第2个元素 print(animal[0: 3]) # 为啥是3呢,因为切片包括头不包括尾,记住就好 # 当然它也可以简写成这样 print(animal[:3]) # 结果是一样的 # 而且还可以获取某个元素之后的所有元素 print(animal[1:]) # 获取所有的元素 print(animal[:])
结果:
["mokey", "elephent", "tiger"] ["mokey", "elephent", "tiger"] ["elephent", "tiger", "snake"]
怎么样?我们是不是可以以任何方式来获取元素,下面我们来看一下更高级的切片
# 定义一个包含数字的列表 num = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 进行步长为2的切片 print(num[0: 9: 2]) # 反转整个列表 print(num[::-1])
结果:
[1, 3, 5, 7, 9] [9, 8, 7, 6, 5, 4, 3, 2, 1]
怎么样是不是很有意思,多了解一下列表的切片用法,以后会经常用的到。
我们已经学习了列表的很多操作方法,比如append,extend,index,remove,pop等等,但我们没有学到的还有很多,有多少呢,我们用dir方法来看一下list拥有多少种方法。
dir(list)
结果:
[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘clear‘, ‘copy‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]
是不是很多,是不是感觉我们学到的东西才冰山一角,我们先介绍几种比较常用的方法,其他的我们以后会接触到。
num = [1, 3, 5, 2, 7, 6, 8, 1, 1] # count()方法用来获取某个元素在列表中的出现次数 print(num.count(1)) # reverse()方法用来反转整个列表 num.reverse() print(num) # sort()方法用来排序整个列表 num.sort() print(num)
结果:
3 [1, 1, 8, 6, 7, 2, 5, 3, 1] [1, 1, 1, 2, 3, 5, 6, 7, 8]
这次的内容以经很多了,所以大家理解了这些方法之后,不妨再去回头看看这次的内容,温故而知新可以为师矣嘛,所以一定要清楚复习的重要性。