# 1.列表的格式
# [数据1,数据2,数据3,···]
# 列表 可变数据类型
# 列表可以存储多个数据,数据之间的逗号以英文逗号分隔
# 列表可以存储不同类型数据,但一般存储同一数据类型,这样便于操作
# list_name = []  # 定义了一个空的列表
# 定义了一个有数据的列表
# 可以去索引和切片
print('1.列表的格式')
list_name = ['小明', '小刚', '小芳']
print(list_name[0])  # 小明
print(list_name[0][0])  #
print(list_name[1:])  # ['小刚', '小芳']

python中的列表和元组

# 2.列表的常规操作
print()
print('2.列表的常规操作')
list_data = []
# append 追加(在容器的最后添加一个数据)
print('append()')
list_data.append('小明')
# 因为列表是可变数据类型,
# 所以不需要使用一个新的列表进行接收
print(list_data)

python中的列表和元组

# pop() popup缩写 意思是弹出
# 根据索引从列表中删除一个数据
# 会返回弹出的数据
# 默认删除最后一个 相当于pop(-1)
# 删除指定的索引位置 pop(索引)
print()
print('pop()')
list_data = [1, 2, 3, 4, 5, 6, 7]
list_data.pop()  # 默认删除最后一个数局
print(list_data)
data = list_data.pop(0)  # 删除第一个数据
print(list_data)
print(data)  # 打印弹出的数据

python中的列表和元组

# sort(key,reverse是否倒置,默认False) 对数据进行排序
# 字符串排序是通过ASCII码
print()
print('sort()')
list_data = [2, 3, 1, 5, 8, 7]
list_data.sort()  # 默认进行从小到大的排序
print(list_data)
list_data.sort(reverse=True)  # 启动倒置,从大到小排序
print(list_data)

python中的列表和元组

# reverse() 倒置列表
# sort(reverse=True) 是先排序再倒置
# reverse() 是直接倒置
print()
print('reverse()')
list_data = [1, 3, 2]
list_data.reverse()
print(list_data)

python中的列表和元组

# count() 统计里面的某一相同数据有多少个
# 某一个数据出现的次数
# 这是一个获取东西的函数
# 不会修改原列表
print()
print('count()')
list_data = [1, 3, 2, 1, 1, 2]
print(list_data.count(1))  # 1出现的次数为3

python中的列表和元组

# index() 查找索引 找到则返回索引,没找到则报错
# 如果要查找的数据有多个,则返回最近的数据的索引
# 字符串中查找有find和index
# 列表查找只有index
print()
print('index()')
list_data = [1, 3, 2, 1, 1, 2]
data = list_data.index(3)  # 1
print(data)
# data = list_data.index(4)  # 4没在列表,会报错

python中的列表和元组

# extend(可迭代对象) 补充 延伸 扩大
# 把可迭代对象里面的数据一个一个的追加到列表中
print()
print('extend()')
list_data1 = [1, 2, 3]
list_data2 = [3, 4, 5]
print(list_data1+list_data2)
list_data1.extend(list_data2)
print(list_data1)
# 这两行+和extend的结果输出相同
# 但是要知道+只能连接两个相同类型的数据
list_data3 = '小明'
# print(list_data1+list_data3)  # +连接不同类型会报错
list_data1.extend(list_data3)  # 字符串数据会被一个一个拆开放入
print(list_data1)  # [1, 2, 3, 3, 4, 5, '小', '明']

python中的列表和元组

# remove(数据) 删除某一个数据
# pop()根据索引删除
# remove()根据数据删除
print()
print('remove()')
list_data = [1, 2, 3, 2, '小明']
list_data.remove(2)  # 只能删掉第一个2
print(list_data)
list_data.remove('小明')
print(list_data)
# list_data.remove(6)  # 6不在列表中,会报错

python中的列表和元组

# insert() 插入数据
# 会把原列表当前输入索引及之后索引后移一位
print()
print('insert()')
list_data = [1, 2, 3]
list_data.insert(0, '小明')  # 在索引为0的位置插入
print(list_data)

python中的列表和元组

# clear() 清空列表中的数据
print()
print('clear()')
list_data = [1, 2, 3]
list_data.clear()  # 删除列表中的全部数据
print(list_data)

python中的列表和元组

# copy() 复制 深复制 浅复制
print()
print('copy()')
# 深复制 完全复制()
# 两个变量所指向的存储位置是同一个
list1 = [1, 2, 3]
list2 = list1
list2.pop()  # 删除list2的3
print(list2)
print(list1)  # 但是list1的3也没有了
# 浅复制 copy() 只复制表面数据
list1 = [1, 2, 3]
list2 = list1.copy()
list2.pop()
print(list2)
print(list1)

python中的列表和元组

# 3.浅说公共方法
print()
print('3.浅说公共方法')
# len() 获取容器里面的长度
print('len')
print(len('12345'))  # 5
print(len([1, 2, 4]))  # 3
# del 删除变量
print()
print('del')
list1 = [1, 2, 3]
del list1[0]  # del(list1[0])
print(list1)
# 橙色的是关键字参数 紫色的是函数
# 系统函数可以作为变量名称使用,
# 但是作为变量名称使用后,将没有原函数的功能

python中的列表和元组

# 4.遍历列表
print()
print('4.遍历列表')
list_data = ['a', 'b', 'c']
for i in list_data:
    print(i)

python中的列表和元组

# 5.列表的嵌套使用
print()
print('5.列表的嵌套使用')
list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list2 = [1, 2, [1, 2, [1, 2]]]  # 多层嵌套
print(list1[1][1])  # 取到list1的5

python中的列表和元组

# 6.元组 tuple
# 是小括号()
# 是不可变数据类型
# 不能删除,修改,和增加
print()
print('6.元组')
tuple_data = (1, 2, 3, 4)
print(type(tuple_data))
# 单个数据的元组
tuple_data = (66,)  # 单个数据的元组,需要在后面加逗号
print(type(tuple_data))
tuple_data0 = (66)  # 如果没有逗号,则数据类型为没有括号时的数据类型
print(type(tuple_data0))

python中的列表和元组

# 今日作业
'''
1,办公室里有张三,李四,王五3个人,
现在小宋也到班公室来上班了,
如何用列表来表示?并输出办公室有哪些人;
2,过了一会,王五有事离开了办公室,
程序应该如何表达?并输出办公室有哪些人
'''
print()
print('今日作业')
list_people = ['张三', '李四', '王五']  # 创建列表存储这三个人
list_people.append('小宋')  # 小宋来上班
# list_people.insert(3, '小宋')
print(list_people)
list_people.remove('王五')  # 王五离开
# list_people.pop(2)  # 根据索引删除
print(list_people)

python中的列表和元组