# 序列
# 列表,是python中的一个对象
# 对象就是内存中专门用来存储数据的区域。
# 对象中只能存储一个单一的数据,而列表中可以保存有序的多个数据。
# 通过[]创建列表
my_list = []
print(my_list,type(my_list))
# 列表中存储的数据称为元素
# 一个列表中可以存储多个元素,也可以在创建列表时指定列表中的元素。
my_list = [10]
my_list = [10,20,30,40,50]
print(my_list)
# 列表中可以保存任意的对象
my_list = [10,'hello',True,None,[20,30],print]
print(my_list)
# 列表中的对象都会按照插入的顺序保存在列表中,
# 第一个插入的保存在第一个位置,往后一次类推。
# 我们可以通过索引来获取列表中的元素,
# 索引是元素在列表中的位置,列表中的每一个元素都有一个索引。
# 索引是从0开始的整数,第一个位置索引是0,第二个位置索引是1,往后以此类推。
# 如果索引超出列表长度则会抛出异常
print(my_list[1])
print(my_list[3])
# 获取列表的长度,即列表中元素的个数
print(len(my_list))
# 切片,从现有列表中获取一个子列表
stus = ['jack','lily','mark','jason','rock','jack','lily']
# 列表的索引可以是负数,表示获取列表中倒数第几个元素。
print(stus[-1]) # mark
print(stus[-2]) # lily
# 通过切片来获取指定的元素,
# 语法 列表[起始:结束],切片获取元素时会包括起始位置,但不包括结束位置元素。并且会返回一个新的列表,不会影响原来的列表。
# 起始和结束位置可以省略不写,
# 省略起始位置则会从第一个元素开始截取。
print(stus[:2])
# 省略结束位置则会截取到最后一个元素。
print(stus[1:])
# 起始和结束位置都不写则相当于创建了一个列表副本
print(stus[:])
# 语法 列表[起始:结束:步长]
# 步长表示每次获取元素的间隔,默认是1
print(stus[0:5:2])
# 步长不可以是0,但可以是负数,如果是负数则会从列表的最后向前获取元素。
print(stus[5:1:-1])
# + 和 *
# + 可以将两个列表拼接为一个列表
my_list = [1,2,4] + [3,5,6]
print(my_list)
# * 可以将列表重复指定的次数
my_list = [1,2,3] * 2
print(my_list)
# in 和 not in
# in 用来检查指定元素是否存在于列表中,存在返回True,反之返回False
# not in 用来检查指定元素是否不在列表中,不存在返回True,反之返回False。
print('ll' in stus)
print('ll' not in stus)
# min()获取列表中的最小值
# max()获取列表中的最大值
my_list = [10,20,30,40,50]
print(min(my_list))
print(max(my_list))
# 方法和函数基本上是一样的,但是方法必须通过 对象.方法()的形式来调用
# print()方法实际上就是和对象关系紧密的函数
# index()方法获取指定元素在列表中的第一次出现时的索引
print(stus.index('lily'))
# index()的第二个参数表示查找元素的起始位置,第三个参数表示查找的结束位置,
print(stus.index('rock',1,5)) # 如果在指定查找范围内获取不到指定的元素会抛出异常
# count()统计指定元素在列表中出现的次数
print(stus.count('lily'))
# 序列,是python中最基本的数据结构
# 数据结构指计算机中数据存储的方式
# 序列用于保存一组有序的数据,所有的数据在序列汇总都有唯一的位置(索引)
# 序列中的数据会按照添加的顺序来分配索引
# 序列分类:
# 可变序列
# 列表list
# 不可变序列
# 字符串str
# 元祖tuple
# 修改列表
print('修改前',stus)
# 可直接通过索引来修改对应的元素
stus[0] = 'AA'
print('修改后',stus)
# del用来删除指定索引的元素
del stus[1]
print('删除后',stus)
# 使用切片来修改列表
# 用切片进行赋值时只能使用序列
stus[0:2] = ['AA','BB'] # 使用新元素替换旧元素
stus[0:2] = ['aa','bb','cc']
stus[0:0] = ['dd'] # 插入新的元素
# 设置步长是,序列中的元素个数必须和切片中元素个数一致
stus[::3] = ['FF','GG','HH']
print(stus)
# 用切片来删除元素
del stus[0:2]
print(stus)
del stus[::2]
print(stus)
# 以上操作只适用于可变序列
s = 'hello'
#s[1] = 'a' # 无法通过索引修改,
# 需要通过list()函数将其转为list,然后进行修改
s = list(s)
s[1] = 'a'
print(s)
# 列表的方法
stus = ['bb', 'GG', 'jason', 'rock', 'HH', 'lily']
# append() 向列表的最后添加一个元素
stus.append('QQ')
print(stus)
# insert(ele,index) 向列表的指定位置插入元素
# ele 要插入的元素 , index 插入元素的位置
stus.insert(2,'SS')
print(stus)
# extend() 使用新的序列来扩展当前序列
stus.extend(['LL','MM'])
# stus += ['LL','MM'] 与extend作用一样
print(stus)
# clear() 清空列表
# stus.clear()
# pop() 根据索引删除并返回被删除的元素
print(stus.pop(2)) # 删除指定位置的元素
print(stus.pop()) # 删除最后一个元素
# remove() 删除指定值的元素,如果有多个相同的值则只会删除匹配的第一个元素
stus.remove('bb')
print(stus)
# reverse() 反转列表
stus.reverse()
print(stus)
# sort() 丢列表进行排序,默认是升序排列
# 如果需要降序需要传递参数 reverse=True
stus.sort()
print(stus) # 包含大小写的,先按照大写字母排序,在按照小写字母排序
stus.sort(reverse=True)
print(stus)
# 遍历列表,将列表中所有元素取出
# 使用while 循环来遍历列表
i = 0
while i < len(stus):
print(stus[i])
i += 1
# 使用for循环来遍历列表
# 语法 :
# for 变量 in 序列 :
# 代码块
# for循环中的代码块会执行多次,序列中有几个元素就执行几次
# 每执行一次就会将序列中的一个元素赋值给变量,然后通过变量来获取元素
for s in stus :
print(s)