列表是我们经常会使用到的一个数据类型,我们从字面上来理解一下列表是什么?
列表从字面上来看,表可以理解成表格,列可以理解成队列,那么列表相当于一张表格,从上置下像队列一样依次填写内容,所以它是由多个值组成的数值序列,从左到右依次存储,且不受数据类型的限制,就是说我们可以在列表中存放数字,存放字符串,甚至再存放一个列表(这个叫多维列表,后面再详细说)

a = [1,'2',3.4,[5,6]]
print(a)

# 输出结果:[1, '2', 3.4, [5, 6]]

废话不多说,上面a就是一个列表,我们可以看见这个列表里面存放了四个数据,依次是数字1、字符串'2'、浮点数3.4、列表[5,6],这也就能够说明列表的值不受单一数据类型的限制;从上面我们也可以发现,列表的定义是用[](中括号)括起来的,这个就像是在划地盘,说明中括号里面的数据就是它的;

好了,思考一个问题,我们之前使用字符串或者数值变量的时候,直接拿来用就可以了,那我要是想把列表a里面的1拿出来,该怎么办?
接下来我打个比方,有一条彩色的链子,一共7节,颜色分别是红黄橙绿青蓝紫,我想要橙颜色的那一节,有什么办法可以找到?是不是从头到尾的第三节,或者从尾到头的第五节;
同样的道理,上面的列表就像一条链子,不同的数值代表不同的颜色,我们想要找到这个数值,只需要知道它在列表中的位置就好了;但是需要注意的一点,第一个值的序号不是1,而是0:

a = [1,'2',3.4,[5,6]]
print(a[0])
print(a[1])
print(a[2])
print(a[3])

# 输出结果:
# 1
# 2
# 3.4
# [5, 6]

那么第一个值的序号为什么是0,而不是1呢?
关于这个问题,想了很久,还是感觉用C语言的方式来讲会好一点;首先列表也是一个值,肯定是需要存储在内存中的,在内存中就肯定有一个地址,在C语言中跟列表相对的概念叫数组,就是一块由多个数据类型相同、大小相同的连续空间,就像是一排大小相同的房子,数组的地址就是这块空间的首地址,就是开头的位置,那么思考一个问题,第一块空间的数据从哪里开始写的?是不是应该从第一块空间的头开始写哈,那第一块空间是不是也是这个连续空间的头,所以数组的地址其实就是数组中第一块空间的地址;上面说了数组是一块大小相同的连续空间,假设开头是10,每块空间的大小是2,那么第二块空间的地址是不是应该是12,后面依次14、16、18……那么我们总结一下,第一块空间的地址是10+2*0,第二块是10+2*1,第三块10+2*2……
发现了没有,这里的下标其实是位移量,第一块空间的地址就是数组的地址,所以不需要位移,这也就是数组中第一个值下标是0的原因;在python中,表示区间范围的,基本都是从0打头的,这个需要注意。

上面我们是正着数的,我们倒着数行不行?

a = [1,'2',3.4,[5,6]]

print(a[0])
print(a[-4])        # -4代表倒数第四个

# 输出结果:
# 1
# 1

下面问题来了,单个值我们可以通过下标来找到,那么我想把‘2’和3.4一次取出有什么办法呢?

a = [1,'2',3.4,[5,6]]

print(a[1:-1])        # 1:-1表示一个区间,从第二个开始,到倒数第一个为止,注意这里为止是不包含倒是第一个的
                      # 在python中这样也是个常见用法,可以记成头包含尾截止

# 输出结果:
# ['2', 3.4]

如果需要从第二个到最后一个,“为止”不用填就好了;举一反三,想想如果需要第一个到倒数第二个呢?

a = [1,'2',3.4,[5,6]]

print(a[1:])

# 输出结果:
# ['2', 3.4, [5, 6]]

现在我有两个列表[1,2,3]、[4,5,6],怎么将这两个列表合并呢?

a = [1,2,3]
b = [4,5,6]

print(a+b)        # 通过 + 操作,我们就可以将两个列表连接起来

# 输出结果:
# [1, 2, 3, 4, 5, 6]

如果我们需要一个[1,2,3,1,2,3,1,2,3],这样的相同字段重复出现列表,有什么比较方便的创建方法呢?

a = [1,2,3]*3        # 通过 * 操作,可以将值重复创建

print(a)

# 输出结果:
# [1, 2, 3, 1, 2, 3, 1, 2, 3]

接下来我需要修改列表中的值,这个改怎么操作呢?

a = [1,2,3,4,5,6,7]

a[1] = 99        # 修改列表的值,想修改变量的值一样修改就行了,注意位置要找对
a[4:] = 1,2,3    # 我们还可以像这样一次性修改多个值,这里是指从第五个到最后,修改成1,2,3
                 # 注意这里值的数量一定要对应,不然就不知道你想将值放到哪里去了
print(a)

# 输出结果
# [1, 99, 3, 4, 1, 2, 3]

上面我们介绍过了一次性修改多个值,那么可不可以一次性将列表中的值赋给其他变量呢?

a = [1,2,3]
b,c,d = a
print(b,c,d)

# 输出结果
# 1 2 3

如果列表里有一个值我不需要了,想去除怎么办?

a = [7,1,2,3,4,5,6,7]

del a[2:5]        # 通过def语句,将列表中的第3个到第5个(注意第6个不算)
a.remove(7)       # 还可以通过remove方法,指定元素删除,注意这里只能删除列表中第一个出现的元素
                  # 可以通过循环清楚某个指定元素
                  # while 7 in a:
                  #     a.remove(7)
print(a)

# 输出结果:
# [1, 5, 6, 7]

如果我想添加一个元素到列表中,该怎么做呢?

a = [1,2,3]

a.append(4)        # 通过append()方法可以在列表的末尾添加元素
a.insert(2,0)      # 通过insert()方法则可以指定元素位置添加,第一个参数是位置,第二个参数是值

print(a)

# 输出结果:
# [1, 2, 0, 3, 4]

接下来我需要查看一下某个值是否存在列表中,这个改怎么操作呢?

a = [1,2,3,4,5,6,7]

print(3 in a)        # 通过in操作,我们就可以判断元素是否在列表中出现了
                     # 同样的,判断元素是不是不存在与列表,用not in就好啦

# 输出结果
# True

我想知道指定元素在列表中的哪个位置,这个改怎么获取呢?

a = [7,1,2,3,4,5,6,7]

print(a.index(7))            # 注意,如果列表中有重复的值,那么只会返回第一个元素的位置

# 输出结果:
# 0

怎么知道列表中有多少个元素呢?

a = [7,1,2,3,4,5,6,7]

print(len(a))        # 通过len()方法可以返回列表有多少个元素

# 输出结果:
# 8

我想统计一下一个元素在列表中出现的次数该怎么办呢?

a = [2,6,4,6,4,2,1,6,5]

print(a.count(2))
print(a.count(6))

# 输出结果:
# 2
# 3

怎么获取列表元素的最大最小值呢?

a = [2,6,4,6,4,2,1,6,5]

print(min(a))
print(max(a))

# 输出结果:
# 1
# 6