列表
列表是一系列数据对象的序列,其中的每个值称为列表的元素,或列表项。元素类型可以是数字、字符串、列表等。
列表可以为空
a = [1,2,2,3]
print(a)
b = [1,"hello",[3,4]]
print(b)
e = []
print(e)
[1, 2, 2, 3]
[1, 'hello', [3, 4]]
[]
列表访问
列表中各个元素的访问,可以通过下标进行访问,具有n个元素的列表,对应的下标分别是0~n-1.
同样我们可以修改列表的元素值
l = [2,3,6,4]
print("修改前...")
print(l[0])
print(l[2])
l[0] = 0
l[2] = 9
print("修改后...")
print(l[0])
print(l[2])
修改前...
2
6
修改后...
0
9
下图表示了上面列表的状态转换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fmEPCdxO-1656686058698)(attachment:image.png)]
遍历列表
- 可以使用
in
这一运算符,判断列表中有没有某一元素 - 遍历列表可以用for循环语句
ls = [1,2,3,4,5,6,7,6]
# 判断1是不是存在列表中
print(1 in ls)
# 判断8是不是存在列表中
print(8 in ls)
# 循环从ls列表中取元素输出,直到取完为止
for l in ls:
print(l)
True
False
1
2
3
4
5
6
7
6
列表运算
- +,列表拼接
- *,列表元素重复拼接
a = [1,2,3]
b = [4,5,6]
c = a + b
print(c)
d = a * 3
print(d)
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
列表切片
切片运算符 :
listname[start : end : step]
start 表示起始索引,end 表示结束索引,step 表示步长.默认步长为1
a = [2,3,5,6,7,8,4]
# 输出下标2~3的元素,切片是左闭右开
print(a[2:4])
# 切片的左边索引省略表示从头开始
print(a[:5])
# 切片的右边索引省略表示到尾部结束
print(a[6:])
# 两个值都省略,便是整个列表
print(a[:])
# 以步长为2,访问列表
print(a[::2])
[5, 6]
[2, 3, 5, 6, 7]
[4]
[2, 3, 5, 6, 7, 8, 4]
[2, 5, 7, 4]
del语句
l = [4,5,6,3,7,8,2,1,3,9,0,-1]
# 删除第0个元素
del l[0]
print(l)
# 删除2:4元素
del l[2:4]
print(l)
[5, 6, 3, 7, 8, 2, 1, 3, 9, 0, -1]
[5, 6, 8, 2, 1, 3, 9, 0, -1]
列表的方法
# list.append(x) 在列表末尾添加一个元素x,没有返回值
a.append(10)
print(a)
[2, 3, 5, 6, 7, 8, 4, 10]
# list.extend(iterable) 用可迭代对象(元组,列表)扩展列表
c = ['a', 's','d']
a.extend(c)
print(a)
[2, 3, 5, 6, 7, 8, 4, 10, 'a', 's', 'd']
# list.insert(i, x) 在指定位置插入元素x
a.insert(2,'w')
print(a)
[2, 3, 'w', 5, 6, 7, 8, 4, 10, 'a', 's', 'd']
# list.remove(x) 从列表中删除第一个值为x的元素,未找到元素,会报ValueError异常
a.remove(5)
print(a)
[2, 3, 'w', 6, 7, 8, 4, 10, 'a', 's', 'd']
# list.pop([i]) 删除列表中指定位置的元素,并返回该元素,[i]是可选参数
b = a.pop() # 删除最后一个元素
print(a)
print(b)
[2, 3, 'w', 6, 7, 8, 4, 10, 'a', 's']
d
# list.index(x[, start[, end]]) 返回第一个值为x的元素的索引值,[, start[, end],切片索引,可省略.未找到元素,会报ValueError异常
i = a.index(6)
print(i)
3
# list.count(x) 返回元素x的出现次数
print(a.count(4))
1
# list.reverse() 翻转列表元素
a.reverse()
print(a)
['s', 'a', 10, 4, 8, 7, 6, 'w', 3, 2]
# list.copy() 返回列表的浅拷贝
b = a.copy()
print(b)
print(id(b))
print(id(a))
['s', 'a', 10, 4, 8, 7, 6, 'w', 3, 2]
2259198334784
2259198333056
# list.sort(*, key=None, reverse=False),列表排序,么有返回值,只能同类型比较
a = [2,3,5,1,8,5]
a.sort()
print(a)
[1, 2, 3, 5, 5, 8]
# list.clear(), 相当于del a
a.clear()
print(a)
[]
列表实现栈
先进后出
stack = [2,3,4,5]
stack.append(6)
print(stack)
stack.append(7)
print(stack)
stack.pop()
print(stack)
stack.pop()
print(stack)
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 7]
[2, 3, 4, 5, 6]
[2, 3, 4, 5]
列表实现队列
先进先出
stack = [2,3,4,5]
stack.append(6)
print(stack)
stack.append(7)
print(stack)
stack.pop(0)
print(stack)
stack.pop(0)
print(stack)
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7]
[4, 5, 6, 7]
列表与字符串
将字符串转换为列表
s = "hello"
# 使用list()方法,将字符串转换为列表
l = list(s)
print(l)
['h', 'e', 'l', 'l', 'o']
s = "hello world python"
# str.split(str="", num=string.count(str)). 默认以空格分割,num是分割次数,默认全部分割
l = s.split()
print(l)
s = "pass-pass-none hello world"
l = s.split('-', 1)
print(l)
['hello', 'world', 'python']
['pass', 'pass-none hello world']
将列表转换为字符串
# 使用join()方法,将列表加入字符串,delimiter是列表各个元素连接成字符串的分界符
delimiter = " "
l = ["hh","hun","kuh"]
str = delimiter.join(l)
print(str)
hh hun kuh
is和==运算符
a = "hello"
b = "hello"
# a 和 b实际指向同一个字符串对象(字符串对象是不可变的),所以a b是同一个
print(a is b)
print(a == b)
# b[0] = 'l' 会报TypeError: 'str' object does not support item assignment
# l 和 g相等,但不是同一个,他们都是可变值
l = ['h','e','l','l','o']
g = ['h','e','l','l','o']
print(l is g)
print(l == g)
True
True
False
True
# 如何改变字符串b的值呢?
# 可以将字符串先转换为list,修改完之后再变为str
print(id(b))
b = list(b)
print(id(b))
b[0] = 'l'
d =""
b = d.join(b)
print(b)
print(id(b))
print(a is b)
2259199088112
2259199088896
lello
2259199088752
False
列表推导式
列表推导式用于对一个序列或可迭代对象的每个元素应用某种操作创建出一个新的列表。
squares = []
for x in range(10):
squares.append(x**3)
print(squares)
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
# lambde 是一个匿名函数,x是参数,x**3是要执行的函数体
# map()提供函数和指定序列做映射,map(function, iterable, ...),返回一个新的列表(python2.x返回列表,python3.x返回迭代器,需要list转为列表)
squares = list(map(lambda x:x**3, range(10)))
print(squares)
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
squares = [x**3 for x in range(10)]
print(squares)
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
嵌套的列表推导式
matrix = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]
# [row[i] for row in matrix] 是后面for子句操作规则
# row[i] for row in matrix 本身也是一个列表推导式
transpose = [[row[i] for row in matrix] for i in range(4)]
print(transpose)
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]