#1、作用:用来存多个值,按照位置顺序通过索引取值(存多个值,索引对应值)
#2、定义:
# l=[1,2,'hanhan',[111,222]] #l=list([1,2,'hanhan',[111,222]])
# print(type(l))
#3、类型转换:但凡能够被for循环遍历的类型都可以当作参数传给list进行转换
# res=list('hello') #list底层调了一个for循环,循环这个字符串,讲字符取出来当作列表的元素
# print(res) #['h', 'e', 'l', 'l', 'o']
#相当于底下这个代码
# l=[]
# for x in 'hello':
# l.append(x)
# print(l)
# res=list({'k1':111,'k2':222,'K3':333})
# print(res) #['k1', 'k2', 'K3']
#4、内置方法
#优先掌握的方法:
#1、按索引取值(正向取值+反向取值):既可取又可改
# l=[111,'egon','hello']
#正向取
# print(l[0])
#反向取
# print(l[-1])
#可取也可改
# l[0]=222 #索引存在则修改对应的值
# print(l)
#无论是取值操作还是赋值操作,索引不存在
# l[3]=333 #报错,IndexError: list assignment index out of range,超出索引范围
#2、切片(顾头不顾尾,步长)
# l=[111,'egon','hello','a','b','c','d',[1,2,3]]
# res=l[0:3]
# print(res) #[111, 'egon', 'hello']
# res=l[0:5:2] #取到0-4 这五个元素,每隔两个取一个
# print(res) #[111, 'hello', 'b']
#取出原列表
# print(l[0:len(l)])
# new_l=l[:] #切片等同于拷贝行为,而且相当于浅拷贝
# l[-1][0] = 1111 #验证深浅拷贝
# print(l) # [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1111, 2, 3]]
# print(new_l) # [111, 'egon', 'hello', 'a', 'b', 'c', 'd', [1111, 2, 3]]
# print(l[::-1]) #列表倒置
#3、长度
# print(len([1,2,3]))
#4、成员运算in 和 not in
# print('aaa' in ['aaa',1,2])
# print(1 not in ['aaa',1,2])
#5、往列表里添加值
# 5.1追加,append 再列表末尾追加
# l=[111,'egon','hello']
# l.append(333)
# print(l) #[111, 'egon', 'hello', 333]
#5.2插入值
# l=[111,'egon','hello']
# l.insert(1,'alex')
# print(l) #[111, 'alex', 'egon', 'hello'],在原列表索引值1前添加元素
#5.3
# new_l=[1,2,3]
# l=[111,'egon','hello']
# l.append(new_l)
# print(l) [111, 'egon', 'hello', [1, 2, 3]]
# for item in new_l:
# l.append(item)
# print(l) [111, 'egon', 'hello', 1, 2, 3]
#extend:实现上述代码:
# l.extend(new_l)
# print(l) #[111, 'egon', 'hello', 1, 2, 3]
# l.extend('abc')
# print(l) #[111, 'egon', 'hello', 1, 2, 3, 'a', 'b', 'c']
# lll=[]
# l.append(333)
# lll.append(444)
#6、删除
#方式一:通用的删除方法,没有返回值,只是单纯的删除
# l=[111,'egon','hello']
# del l[1] #不支持赋值语法 x=del l[1]
# print(l)
#方式二:l.pop()根据索引删除,不指定索引默认删除最后一个,会返回删除的值
# l=[111,'egon','hello']
# l.pop()
# print(l) [111, 'egon']
# res=l.pop(1) #这是一不是L
# print(l) #[111, 'hello']
# print(res) #egon
#方式三:l.remove()根据元素删除,返回none
# l=[111,'egon','hello']
# # l.remove('egon')
# # print(l)
# res=l.remove('egon')
# print(res) #None
#7、循环
# for x in [1,'aaa','bbbb','aaa']:
# print(x)
#8、需要掌握的的操作
# l=[1,'aaa','bbb','aaa']
# print(l.count('aaa')) #统计aaa出现的次数
# print(l.index('bbb')) #返回元素的索引,找不到报错
# print(l.clear())#清空列表中的所有元素
# l.reverse() #不是排序,就是把列表倒过来
# print(l) #反转列表
# l=[11,-3,9,2]
# # l.sort() #默认从小到大排,即升序,列表中只能为同种类型才可以排序
# l.sort(reverse=True) #设置为降序,即从大到小排
# print(l)
# l=['c','a','b'] #字符串也可以比大小,按照对应的位置的字符依次pk
# 按照ASCI表的先后顺序区分字符串大小,排到后面的比较大
# l.sort()
# print(l)
#
# print('abz' > 'zbcdfj')
#了解:列表之间也可以比较大小,原理同字符串一样
# l1=[1,'abc','zaa']
# l2=[10]
#按照对应位置依次pk,对应位置必须是同种类型
# print(l2>l1) #因为10 > 1,所以L2>L1,输出为True
#补充
#队列;FIFO 先进先出
# l=[]
# #入队操作
# l.append('forst')
# l.append('second')
# l.append('third')
# print(l)
#出队操作
# print(l.pop(0)) #取出forsr
# print(l.pop(0)) #取出second
# print(l.pop(0))
#堆栈:LIFO 后进先出
l=[]
#入栈操作
l.append('forst')
l.append('second')
l.append('third')
print(l)
#出栈操作 后进去的先出来了
print(l.pop()) #取出third
print(l.pop()) #取出second
print(l.pop())