列表
列表是Python中最基本也是最常用的数据结构之一。列表中的每个元素都被分配一个数字作为索引,用来表示该元素在列表内所排的位置。第一个元素的索引是0,第二个索引是1,以此类推。
Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、分片、追加、删除,成员判断。
从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针。
创建列表的两种方式
1.[]
2.list()
ctrl + 鼠标点击
iterable 可以用for 循环 都是可迭代的
() 元组
{} 字典
{} 集合
pep8 代码规范
l = list('str') #['s', 't', 'r']
l = list((1, 2, 3)) #[1, 2, 3]
print(l)
l = [1, 'juran', 1.2]
print(l) #[1, 'juran', 1.2]
访问列表内的值
列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一。要访问它的某个元素,以方括号加下标值的方式即可。注意要确保索引不越界,一旦访问的索引超过范围,会抛出异常。所以,一定要记得最后一个元素的索引是len(list)-1。
# 1.访问列表的值
lis = ['a', 'b', 'c']
value = lis[1]
print(value) #b
value1 = lis[1]
print(value1) #b
# 2.修改元素的值
lis[1] = '利弊'
# 不能赋值列表中不存在的索引,否则会报错
# lis[3] = 'juran' #IndexError: list assignment index out of range
print(lis)
# 3.列表删除
# 使用del语句或者remove(),pop()方法删除指定的元素。
del lis[0]
print(lis) #['利弊', 'c']
# 根据元素的值进行删除
print(lis.remove('a')) #None ,因为remove()方法没有返回值
# 不能删除列表中没有的值,否则会报错
#lis.remove('d') #ValueError: list.remove(x): x not in list
# 根据索引来进行删除的 默认弹出最后一个 传值的话 按照索引来进行弹出
#[] 可选参数
lis = ['a', 'b', 'c','b']
value = lis.pop(2)
print(value) # c
print(lis) #['a', 'b', 'b']
列表的特殊操作
1)列表组合
2)列表的乘法
3)判断元素是否在列表内部
4)迭代列表中的每个元素
lis1 = [1, 2, 3]
lis2 = [4, 5, 6]
# 1.列表的拼接(组合) 不是对应位置相加!!!!
lis3 = lis1 + lis2
print(lis3) #[1, 2, 3, 4, 5, 6]
# 魔术方法--面向对象中的叫法
print(lis1.__add__(lis2)) #[1, 2, 3, 4, 5, 6]
#2.列表的乘法
lis3 = lis1 * 3
print(lis1.__imul__(2)) # [1, 2, 3, 1, 2, 3]
print(lis3) #[1, 2, 3, 1, 2, 3, 1, 2, 3]
# 列表不能相乘
print(lis1 * lis2) #TypeError: can't multiply sequence by non-int of type 'list'
#3.判断元素是否在列表内部
print(2 in lis1) # True
#4.迭代列表中的每个元素
lis3=[1,4,2,5,3,6]
#遍历lis3
for i in lis3:
print(i)
'''
1
4
2
5
3
6
'''
列表的常用函数
len(list)返回列表元素个数,也就是获取列表长度max(list)返回列表元素最大值
min(list)返回列表元素最小值
list(seq)将序列转换为列表
lis = [1, 3, 2, 4]
print(len(lis))#4
# 魔法方法
print(lis.__len__()) #4
#最大最小值
print(max(lis))#4
print(min(lis)) #1
# 类型转换 str->list
print(list('str'))#['s', 't', 'r']
# type 查看变量的类型
s = 1
print(type(str(s)))#<class 'str'>
# 列表排序
# 反转 *IN PLACE* 修改本身
lis.reverse() #reverse()方法没有返回值,不能直接 print(lis.reverse())--None
print(lis) #[4, 2, 3, 1]
print(lis.reverse()) #None
# 默认升序 reverse=True 降序
lis.sort(reverse=True)
print(lis)#[4, 3, 2, 1]
lis.sort()
print(lis)#[1, 2, 3, 4]
lis1 = [1, 'str', 2]
# 排序:包含不同类型的列表不能进行排序
lis1.sort()
print(lis1) #TypeError: '<' not supported between instances of 'str' and 'int'
切片
切片指的是对序列进行截取,选取序列中的某一段。
切片的语法是:
list[start:end:step]
以冒号分割索引,start代表起点索引,end代表结束点索引,step代表步长。省略start表 示以0开始,省略end表示到列表的结尾。注意,区间是左闭右开的!
start:起始索引,从0开始,-1表示结束
end:结束索引
step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值
注意切片的结果不包含结束索引,即不包含最后的一位,-1代表列表的最后一个位置索引
a=[1,2,3,4,5,6]
b1=a[:] #省略全部,代表截取全部内容,可以用来将一个列表拷给另一个列表
print(b1)
结果:[1, 2, 3, 4, 5, 6]
b=a[0:-1:1] #从位置0开始到结束,每次增加1,截取。不包含结束索引位置
print(b)
结果:[1, 2, 3, 4, 5]
c1=a[:3] #省略起始位置的索引,以及步长。默认起始位置从头开始,默认步长为1,结束位置索引为3
print(c1)
结果:[1, 2, 3]
c=a[0:5:3] #从第一个位置到第6个位置,每3个取一个值
print(c)
结果:[1, 4]
#反向取值
d=a[5:0:-1]
print(d)
结果:[6, 5, 4, 3, 2]
d1=a[::-1]
print(d1)
结果:[6, 5, 4, 3, 2, 1]
lis = ['a', 'b', 'c', 'd', 'e', 'f']
# 取值 bc 区间是左闭右开的!
print(lis[1]) #b
print(lis[2]) #c
print(lis[1:3]) #['b', 'c']
print(lis[1:]) #['b', 'c', 'd', 'e', 'f']
print(lis[:3]) #['a', 'b', 'c']
print(lis[:]) # 复制列表 ['a', 'b', 'c', 'd', 'e', 'f']
print(lis[::2]) #['a', 'c', 'e']
# 写的是负数
print(lis[-1]) #f
列表的内置方法
li = ['a', 'b', 'c', 'd', 'a']
lis = li[:]
li.append('e') #['a', 'b', 'c', 'd', 'a', 'e']
li.append(['e', 'f']) #['a', 'b', 'c', 'd', 'a', 'e', ['e', 'f']]
print(li)
print(li.count('a')) #2
#lis = ['a', 'b', 'c', 'd', 'a']
lis.extend(['e', 'f']) #['a', 'b', 'c', 'd', 'a', 'e', 'f']
print(lis)
# 字典 {key:value} {name:juran}
li.extend({'name':'juran','age':18}) #['a', 'b', 'c', 'd', 'a', 'e', ['e', 'f'], 'name', 'age']
print(li)
# L.insert(index, object)
# 根据索引的位置来添加元素
li.insert(2,'juran')
print(li) #['a', 'b', 'juran', 'c', 'd', 'a', 'e', ['e', 'f'], 'name', 'age']
# 复制
li = ['a', 'b', 'c', 'd', 'a']
lis = li.copy() #['a', 'b', 'c', 'd', 'a']
lis[1] = 'juran'
print(li) #['a', 'b', 'c', 'd', 'a']
print(lis)#['a', 'juran', 'c', 'd', 'a']
lis1 = li[:]
print(lis)#['a', 'juran', 'c', 'd', 'a']
print(lis1)#['a', 'b', 'c', 'd', 'a']
del li[:]
li.clear()
print(li) #[]
# 效果是一样的