Python列表

一、列表

(一)列表

是能够存储各种数据的容器;列表可变;列表有序(下标)。

列表的容器符号[],list。

(二)列表可变

首先创建一个空列表

list1 = []

结果输出:

[]
1.增加元素

(1)append(): 追加

代码:

list1 = []
print(list1)
list1.append('Python')
print(list1)
list1.append('Java')
print(list1)

输出结果:

[]
[‘Python’]
[‘Python’, ‘Java’]

(2)insert( index, obj ): 插入

代码:

list1 = ['Python', 'Java']
list1.insert(1, 'HTML')  #在下标为1的位置插入'HTML'
print(list1)
list1.insert(1, 0)		 #在下标为1的位置插入0
print(list1)

输出结果:

[‘Python’, ‘HTML’, ‘Java’]
[‘Python’, 0, ‘HTML’, ‘Java’]

index: 插入位置下标

obj: 插入元素

2.修改元素

通过下标修改元素

语法:列表[下标] = 新的值

代码示例:

list1 = ['Python', 0, 'HTML', 'Java']
list1[1] = 'C'
print(list1)

输出结果:

[‘Python’, ‘C’, ‘HTML’, ‘Java’]

3.删除元素

(1)del:删除某个元素

语法:del 列表[下标]

代码示例:

list1 =  ['Python', 'C', 'HTML', 'Java']
del list1[1]
print(list1)

输出结果:

[‘Python’, ‘HTML’, ‘Java’]

(2)remove(obj):移除某个元素(彻底删除)

代码示例:

list1 = ['Python', 'HTML', 'Java']
# 删除的元素没了
print(list1.remove('Java'))   # None
print(list1)

输出结果:

None
[‘Python’, ‘HTML’]

(3)pop:移除某个元素(删除元素后知道删除的是谁)

代码示例:

list1 = ['Python', 'HTML']
# 删除的元素暂存
print(list1.pop(0))   # Python这个元素虽然被移除了,但是会记得删除 					   # 的是python
print(list1)

输出结果:

Python
[‘HTML’]

(4)clear:将列表清空

代码示例:

list1 = ['HTML']
list1.clear()
print(list1)

输出结果:

[]

(三)列表有序(下标)

下标:每个元素在列表中的位置。

1.正向下标:从0开始
2.负向下标:从-1开始

1.2.的代码示例:

list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']

# 海王
print(list1[2], list1[-2])

输出结果:

海王 海王

下标为2和-2获取的是同一个元素。

3.下标不能越界

如果越界会输出:

IndexError: list index out of range

(四)切片

1.定义

切片:左闭右开区间,从原来的容器中提取元素组成新的容器。

注意:切片可以越界。超出部分获取不到元素。

代码示例:

list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[1:6])

输出结果:

[‘环太平洋’, ‘海王’, ‘复仇者联盟’]

2.语法

变量[M:N:step]

M:起始范围(不写M,默认从头开始取)。

N:结束范围(不写N,默认取到尾)。

step:步长(step = 1,可以不写)。

代码示例:

list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[1:3])     # 下标为1,2
print(list1[1:4:2])   # 下标为1,3
print(list1[:4:2])    # 从头到4间隔2取
print(list1[::2])     # 从头到尾间隔2取
print(list1[:])		  # 从头取到尾

输出结果:

[‘环太平洋’, ‘海王’]
[‘环太平洋’, ‘复仇者联盟’]
[‘蜘蛛侠’, ‘海王’]
[‘蜘蛛侠’, ‘海王’]
[‘蜘蛛侠’, ‘环太平洋’, ‘海王’, ‘复仇者联盟’]

3.使用切片时应注意

(1)起始范围和结束范围不写时:冒号必须存在;

步长不写时:冒号不用写。

(2)步长控制获取的元素,每间隔步长-1个元素获取元素。

(获取的当前元素下标+步长=下一个要获取的元素下标)

代码示例:

list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[::-1])   # 倒序输出列表
print(list1[4:1:-1]) # 输出3,2

输出结果:

[‘复仇者联盟’, ‘海王’, ‘环太平洋’, ‘蜘蛛侠’]
[‘复仇者联盟’, ‘海王’]

(3)M和N同号时:step>0,M<N; step<0,M>N。

(4)M和N异号时:正向下标和负向下标可以组合使用。

代码示例:

list1 = ['蜘蛛侠', '环太平洋', '海王', '复仇者联盟']
print(list1[0:-1])  # 从头取到尾,0,1,2 ,-1不取

输出结果:

[‘蜘蛛侠’, ‘环太平洋’, ‘海王’]

4.切片小练习
# 练习:
movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
# a.获取['阿甘正传'、'霸王别姬'、'环太平洋']
print(movies[::2])
# b.获取['肖申克的救赎'、'环太平洋']
print(movies[1::3])
# c.获取['环太平洋'、'霸王别姬'、'阿甘正传']
print(movies[-2::-2])
# d.获取['猿人泰山'、'阿甘正传']
print(movies[::-5])
# e.获取['霸王别姬']   3种方法
print(movies[2:3])  # 1
a = []
a.append(movies[2])
print(a)            # 2
print([movies[2]])  # 3

输出结果:

[‘阿甘正传’, ‘霸王别姬’, ‘环太平洋’]
[‘肖申克的救赎’, ‘环太平洋’]
[‘环太平洋’, ‘霸王别姬’, ‘阿甘正传’]
[‘猿人泰山’, ‘阿甘正传’]
[‘霸王别姬’]
[‘霸王别姬’]
[‘霸王别姬’]

(五)列表的遍历

1.直接遍历

代码:

movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
# 1.直接遍历
for i in movies:
    print(i)

输出结果:

阿甘正传
肖申克的救赎
霸王别姬
三傻大闹宝莱坞
环太平洋
猿人泰山

2.间接遍历-借助下标

len()能够查看容器的长度

代码:

movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
# 间接遍历-借助下标
# len()能够查看容器的长度
print(len(movies))
for i in range(len(movies)):
    print(movies[i])

输出结果:

6
阿甘正传
肖申克的救赎
霸王别姬
三傻大闹宝莱坞
环太平洋
猿人泰山

3.enumerate(列表名字)

将列表转换为一个可迭代的对象(可用for循环),取出下标和元素

代码:

# 3.enumerate(列表名字):将列表转换为一个可迭代对象(能使用for循环)  取出下标和元素
movies = ['阿甘正传', '肖申克的救赎', '霸王别姬', '三傻大闹宝莱坞', '环太平洋', '猿人泰山']
print(enumerate(movies))
for i in enumerate(movies):
    print(i)

输出结果:

<enumerate object at 0x0000018A7C95E598>
(0, ‘阿甘正传’)
(1, ‘肖申克的救赎’)
(2, ‘霸王别姬’)
(3, ‘三傻大闹宝莱坞’)
(4, ‘环太平洋’)
(5, ‘猿人泰山’)

4.练习:冒泡排序将列表中元素从小到大排列

基本思想:用两层循环,第一层循环控制趟数,每次选出最大的元素放在最后面。

第二层循环控制需要比较的元素。

每趟排序中,排序次数 + 1 = 本趟排序的元素个数。

代码:

list = [23, 56, 10, 55, 76, 100, 30]
# [23, 56, 10, 55, 76, 100, 30]
# [23, 10, 55, 56, 76, 30, 100]
# [10, 23, 55, 56, 30, 76, 100]
# 每趟排序,排序次数 + 1 = 本趟排序的元素个数
# 外层循环控制趟数,每次选出最大的元素放在最后面
for i in range(1, len(list)):
    # 作比较的元素
    print(f'这是第{i}趟排序')
    print('每次排序开始前:', list)
    for j in range(0, len(list) - i):
        print('每次排序取得两个元素', list[j], list[j+1])
        if list[j] > list[j + 1]:
            list[j], list[j + 1] = list[j + 1], list[j]
        # 打印每一次排序的结果
        print(list)

输出结果:

这是第1趟排序
每次排序开始前: [23, 56, 10, 55, 76, 100, 30]
每次排序取得两个元素 23 56
[23, 56, 10, 55, 76, 100, 30]
每次排序取得两个元素 56 10
[23, 10, 56, 55, 76, 100, 30]
每次排序取得两个元素 56 55
[23, 10, 55, 56, 76, 100, 30]
每次排序取得两个元素 56 76
[23, 10, 55, 56, 76, 100, 30]
每次排序取得两个元素 76 100
[23, 10, 55, 56, 76, 100, 30]
每次排序取得两个元素 100 30
[23, 10, 55, 56, 76, 30, 100]
这是第2趟排序
每次排序开始前: [23, 10, 55, 56, 76, 30, 100]
每次排序取得两个元素 23 10
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 23 55
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 55 56
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 56 76
[10, 23, 55, 56, 76, 30, 100]
每次排序取得两个元素 76 30
[10, 23, 55, 56, 30, 76, 100]
这是第3趟排序
每次排序开始前: [10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 23 55
[10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 55 56
[10, 23, 55, 56, 30, 76, 100]
每次排序取得两个元素 56 30
[10, 23, 55, 30, 56, 76, 100]
这是第4趟排序
每次排序开始前: [10, 23, 55, 30, 56, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 55, 30, 56, 76, 100]
每次排序取得两个元素 23 55
[10, 23, 55, 30, 56, 76, 100]
每次排序取得两个元素 55 30
[10, 23, 30, 55, 56, 76, 100]
这是第5趟排序
每次排序开始前: [10, 23, 30, 55, 56, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 30, 55, 56, 76, 100]
每次排序取得两个元素 23 30
[10, 23, 30, 55, 56, 76, 100]
这是第6趟排序
每次排序开始前: [10, 23, 30, 55, 56, 76, 100]
每次排序取得两个元素 10 23
[10, 23, 30, 55, 56, 76, 100]

最终列表从小到大排列为:[10, 23, 30, 55, 56, 76, 100]