Python 学习笔记:列表和元组

列表和元组

1. 列表(list)

1.1 列表的定义

列表是一个有序集合,可以保存任意数量的 python 对象

也可以理解为列表中存的是指针,体现在:

a = [0, 0]
x = [a] * 4		# x 中保存的是四个列表 a 的指针
print(x)
# [[0, 0], [0, 0], [0, 0], [0, 0]]
a[0] = 1
print(x)
# [[1, 0], [1, 0], [1, 0], [1, 0]]

1.2 列表的创建

1.2.1 直接创建列表

array = [1, 2, 3, 4, 5]
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

1.2.2 用 range 创建列表(类似于 matlab 的向量)

vec1 = list(range(10))
print(vec1)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

vec2 = list(range(1, 10, 2))
print(vec2)
# [1, 3, 5, 7, 9]

vec3 = list(range(10, 1, -2))
print(vec3)
# [10, 8, 6, 4, 2]

注意后两种写法中取值是左闭右开区间。

1.2.3 利用推导式创建列表

x = [0] * 5
print(x)
# [0, 0, 0, 0, 0]

x = [i for i in range(10)]
print(x)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

x = [i ** 2 for i in range(1, 10)]
print(x)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

x = [i for i in range(50) if i % 2 == 0 and i % 3 == 0]
print(x)
# [0, 6, 12, 18, 24, 30, 36, 42, 48]

x = [[0 for i in range(2)] for j in range(3)]
print(x)    # [[0, 0], [0, 0], [0, 0]]
# 开高维数组请用此法

1.2.4 创建一个混合列表

mix = [1, 'zhang', 3.14, [1, 2, 3]]
print(mix)
# [1, 'zhang', 3.14, [1, 2, 3]]

1.2.5 创建一个空列表

empty = []
print(empty)
# []

empty = list()
print(empty)
# []

1.3 向列表中添加元素

1.3.1 append()方法

简单的元素添加:

array = [1, 2, 3, 4, 5]
array.append(0)
print(array)
# [1, 2, 3, 4, 5, 0]

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
days.append(['Saturday', 'Sunday'])
print(days)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', ['Saturday', 'Sunday']]
# ['Saturday', 'Sunday'] 被当做一个元素

1.3.2 extend() 方法

列表的连接:

array = [1, 2, 3, 4, 5]
array.extend([0])		# 参数必须也是一个列表
print(array)
# [1, 2, 3, 4, 5, 0]

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
days.extend(['Saturday', 'Sunday'])
print(days)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

1.4 从列表中删除元素

1.4.1 remove() 方法

查找并删除第一个元素:

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
days.remove("Wednesday")
print(days)
# ['Monday', 'Tuesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

1.4.2 pop() 方法

参数是索引,缺省为 -1,返回删除的元素:

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print(days.pop(0))
# Monday
print(days)
# ['Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

1.4.3 del 关键字

适用于“对象”列表,不适用于简单的数组:

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
del days[0: 2]
print(days)
# ['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

1.5 获取列表中的元素

1.5.1 列表的索引

a = list(range(0, 100, 10))
print(a)
# [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
print(a[2])
# 20
print(a[-2])
# 80

1.5.2 列表的切片

形式:start: stop: step

a = list(range(1, 10))
b = a[1: 5: 2]
print(a)        # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(b)        # [2, 4]

1.5.3 浅拷贝与深拷贝

a = [5, 4, 3, 2, 1]
b = a           # 直接赋值(另外起了个名字)
c = a[:]        # 浅拷贝(真的是在复制元素)

print(b is a)   # True
print(c is a)   # False
print(c == a)	# True

a.sort()
print(b)        # [1, 2, 3, 4, 5]
print(c)        # [5, 4, 3, 2, 1]
a = [[1, 2], [3, 4]]
b = a
c = a[:]

print(b is a)	# True
print(c is a)	# False

a[0][0] = 0
print(b)    	# [[0, 2], [3, 4]]
print(c)    	# [[0, 2], [3, 4]]

1.6 列表的操作符

1.6.1 ==is

  • == 逐个元素比较
  • is 对每个元素比较

1.6.2 +*

  • + 列表拼接并返回新列表(作用同extend(),但是浪费了内存)
  • * 列表的自我复制加长

1.6.3 innot in

判断成员是否在列表内。

1.7 列表的其他方法

1.7.1 count(key)

统计 key 出现的个数

1.7.2 index(value, start=0, end=-1)

返回第一个 value 的索引

1.7.3 sort(key=None, reverse=False)

  • key:指定排序的关键字
  • reverse:是否降序
a = [(1, 2), (2, 3), (1, 3), (2, 1)]
a.sort(key=lambda b: b[1])
print(a)
# [(2, 1), (1, 2), (2, 3), (1, 3)]

2. 元组(tuple)

2.1 元组的创建

t = (1, 2, 3)
print(t, type(t))   # (1, 2, 3) <class 'tuple'>

t = 1, 2, 3			# 也可以不加括号
print(t, type(t))   # (1, 2, 3) <class 'tuple'>

t = (1,)			# 单元素元组要加一个逗号
t = ()				# 空元组

2.2 元组的操作

元组不可更改,方法只有 count()index()

想要更改元组可以通过赋值的方式来更新

2.3 元组的解压(实际上列表也有同样的操作)

t = (1, 2, 3)
a, b, c = t
print(a, b, c)  # 1 2 3

t = (1, 2, 3, 4)
a, *b, c = t	# 利用通配符将多余元素丢给 b
print(a, b, c)  # 1 [2, 3] 4

t = (1, 2, 3, 4)
a, *_, c = t	# 利用通配符丢弃多余元素 
print(a, c)  	# 1 4
posted @ 2022-02-04 23:45  Only(AR)  阅读(90)  评论(0)    收藏  举报