python编程入门之四:列表

第四章 列表

4.1 创建一个列表

我们之前学过c语言的同学都知道一个数据类型叫做数组,但是数组有一个硬性的要求,就是数组内的数据类型必须一致,但由于python没有数据类型,所以python便加入了一个强大的列表,并且几乎可以向里注入任何类型的元素。
列表的创建其实很简单,只需要定义一个列表变量然后将任何数据通过 "[ ] "的形式括起来赋给变量就可以了,像这样。

# 这个列表内只有数字
list1 = [1, 2, 3, 4, 5]
# 但这个列表内有多种类型,有数字,字符串,甚至还可以是一个列表
list2 = [1, 2, 3, "Hopes", [1, 2, 3]]
# 当然,也可以先建一个空列表,以便以后对它进行操作
empty = []

将这段代码录入到pycharm,然后运行一下试试。

4.2 列表中添加元素

列表是可操作的,并且操作起来十分灵活,并且在以后的学习中列表也是不可或缺的部分,列表常用的操作包括:元素的添加,删除,获取,修改,查询。。。并且列表还有很多的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代表要插入的位置,是不是很简单,还是录入代码尝试一下吧。

4.3 元素的获取

在python列表中的每个元素,都有着属于自己的索引值,这个索引值就相当于每个班级学生的序号,相互之间一一对应,那么所以说,我们就可以通过索引的方式来获取我们需要的某个位置上的元素,如下:

# 定义一个列表,里面放着四个同学的名字
name = ["Hopes", "Alex", "Demo", "Harry"]

# 我们想要序号为1的同学的名字
stu1 = name[1]
print(stu1)

# 接着是序号为3的同学的名字
stu3 = name[3]
print(stu3)

结果:

Alex
Harry

是不是很easy,只需要在列表变量名后的" [ ] "内输入你想提取出来的元素的序号,就可以获取相应的元素。
但是有同学会问,如果我知道序号想提取序号对应的元素可以用这种方式,那么如果我知道某个元素的内容,是不是也可以得到它的位置呢?答案是肯定的,python是不会放过任何的细节的,接下来我们了解一下是怎样获取索引值的。

4.5 元素的索引值

如果我们想要得到某个元素的索引值,或者说是它的位置,我们就需要用到另一个BIF,即index方法,index本身就就是索引的意思,所以这里理所当然的也由它承担这份责任,我们来看一下是怎样使用的吧。

# 同样定义一个包含四个名字的列表
name = ["Hopes", "Alex", "Demo", "Harry"]

# 获取"Hopes"同学的位置
loc1 = name.index("Hopes")
print(loc1)

# 获取"Demo"同学的位置
loc2 = name.index("Demo")
print(loc2)

结果:

0
2

怎么样,很简单吧,录入一下代码试试吧。

4.4 元素的替换

既然我们已经学会了元素的获取,那么理解元素的替换并不难,因为如果我们要替换某个元素,就必须先获取到它,所以元素的替换其实也相当于一个元素的重新“赋值”,看看下面的例子吧。

name = ["Hopes", "Alex", "Demo", "Harry"]

# 我们将Alex同学替换成Faker同学
name[1] = "Faker"

# 然后将Harry同学替换成Uzi同学
name[3] = Uzi

# 打印输出
print(name)

结果:

["Hopes", "Faker", "Demo", "Uzi"]

同样录入试一下,学习任何一门编程语言都需要不断地去尝试去修改,只要坚持不懈,终有一天可以成为python编程的大牛。

4.6 元素的删除

我们已经学习了元素的添加,获取,修改,最后我们学习一下关于元素的删除,同样我们介绍常见的删除元素的三种方法----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"]

所以看到没有,为什么叫“弹出”?因为它在删除的过程中会给你返回一个要“弹出”的元素,这样我们就可以知道我们具体删除的是哪个元素了,很方便有没有,录入代码自己尝试一下吧。

4.6 列表的切片

我们想到利用索引值可以取出我们需要的元素,但是我们如果要一次性获取多个元素呢?这又是一个问题,但是这难不倒我们,道高一尺魔高一丈,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]

怎么样是不是很有意思,多了解一下列表的切片用法,以后会经常用的到。

4.7 列表的Partners

我们已经学习了列表的很多操作方法,比如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]

这次的内容以经很多了,所以大家理解了这些方法之后,不妨再去回头看看这次的内容,温故而知新可以为师矣嘛,所以一定要清楚复习的重要性。

相关推荐