第四章 列表、元组、字典

这篇博客详细介绍了Python中的序列类型,包括列表、元组、字典的操作,如创建、访问、更新、删除、排序、复制、迭代器和生成器的使用。同时,讲解了元组的不可变性、字典的键值对操作以及字典内置函数的运用。还包含了课堂练习题,帮助巩固学习效果。
摘要由CSDN通过智能技术生成

目录

一、序列

二、列表

2.1 创建列表

2.2 访问列表

2.3 更新列表

2.4 删除列表

2.5 列表运算符

2.6 列表函数&方法

2.7列表操作函数

2.8 sort函数和sorted函数

2.8.1 sort()

2.8.2 sorted

2.9 列表复制

2.9.1 引用复制

2.9.2 非引用复制

2.10 推导列表

2.11 深浅拷贝

2.11.1 浅拷贝

2.11.2 深拷贝

2.12 通过 list 实现堆栈

2.13 通过 list 实现队列

三、迭代器和生成器

3.1 迭代器

3.2 生成器

3.3 迭代器和生成器的区别

四、枚举

五、元组

5.1 创建元组

5.2 访问元组

5.3 修改元组

5.4 序列转换为元组

6、字典

6.1 字典定义

6.2 访问字典

6.3 修改字典

6.4 删除字典

6.5 字典的Key

6.6 字典的遍历

6.7 字典的排序

6.8 字典常用内置函数

6.8.1 get():获取key对应的值

6.8.2 setdefault():生成key,并使用默认值

6.8.3 dict() 生成字典

6.8.4 fromkeys()​​​​​​:用一个可迭代对象生成字典

6.8.5 update():更新字典的value值

6.8.6 popitem():随机返回并删除字典中的一对键和值

6.8.7 pop()删除字典给定key所对应的键值对

6.8.8 in::判断字典中是否存在指定的key或value

七、序列切片

八、课堂练习题

8.1 请统计所有的数字出现的次数

8.2 统计d中一共出现了多少个0

8.3 一个字符串排序,排序规则:小写<大写<奇数<偶数


一、序列

序列指的是有序存储的集合,能够用切片或者下标取指定的元素,比如字符串、列表、元组都属于序列

1.1 序列切片

 列表、元组和字符串都是序列。序列的两个主要特点是索引操作符切片操作符
➢ 切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并且用冒号分隔。
➢ 切片操作符中的第一个数(冒号之前) 表示切片开始的位置,第二个数(冒号之后)表示切片的结束位置,但不包括这个位置(如:list[2:5])。第3个参数为步长,表示隔几个数取一个
➢ 如果切片时,不指定第一个数,Python就会从序列的首位置开始(如list[:5])。如果不指定结束位置,Python就会停止在序列尾(如:list[3:])
>>> a="abcdefg"
>>> a[0]
'a'
>>> a[1]
'b'
>>> a[-1]
'g'
>>> a[-2]
'f'
>>> a[11]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> a[:]
'abcdefg'
>>> a[::2]
'aceg'
>>> a[1::2]
'bdf'
>>> a[::6]
'ag'
>>> a[::-6]
'ga'
>>> a[0::6]
'ag'
>>> a[-1::-6]
'ga'
# 取def,step为1时,从左往右取
>>> a[-4:-1]
'def'
>>> a[-4:6]
'def'
>>> a[3:6]
'def'
>>> a[3:-1]
'def'
# 取fed,step为-1·时,从右往左取
>>> a[-2:-5:-1]
'fed'
>>> a[-2:2:-1]
'fed'
>>> a[5:2:-1]
'fed'
>>> a[5:-5:-1]
'fed'

>>> a=[1,2,3,4,5]
>>> a[1:6:2]
[2, 4]
>>> a[1:6:2]=[10,20]
>>> a
[1, 10, 3, 20, 5]

二、列表

  • 列表用方括号[]标示,内部元素间用逗号隔开。
  • 是一种有序的数据结构,可以根据坐标取值
  • 里面可以放大多数的数据结构,比如:字符、数字、列表、元组、字典等

 # 将1、2、3维度的所有元素分别求和(2种方式求和:不用坐标or用坐标)

"""
a=[1,2,3,4,5]
b=[[1,2],[3,4]]
c=[[[1,2],[3,4]],[[5,6],[7,8]]]
将1、2、3维度的所有元素分别求和(2种方式求和:不用坐标or用坐标)
"""

# 一维
# 不用坐标
a=[1,2,3,4,5]
result = 0
for i in a:
	result += i
print(result)

# 用坐标
result=0
for i in range(len(a)):
	result += a[i]

print(result)

# 二维
# 不用坐标
b=[[1,2],[3,4]]
result = 0
for i in b:
	for j in i:
		result += j

print(result)

# 用坐标
result=0
for i in range(len(b)):
	for j in range(len(b[i])):
		result += b[i][j]

print(result)

# 三维
# 不用坐标
c=[[[1,2],[3,4]],[[5,6],[7,8]]]
result = 0
for i in c:
	for j in i:
		for k in j:
			result += k

print(result)

# 用坐标
result=0
for i in range(len(c)):
	for j in range(len(c[i])):
		for k in range(len(c[i][j])):
			result += c[i][j][k]

print(result)

2.1 创建列表

>>> l = []
>>> l
[]
>>> l= [1,2,4,'a']
>>> l
[1, 2, 4, 'a']

2.2 访问列表

➢ 与字符串的索引一样,列表索引从0开始。
➢ 列表可以进行截取、组合等。
➢ 使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取列
>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[5:]
[5, 6, 7, 8, 9]
>>> a[-1:-4]
[]
>>> a[-1:-4:-1]
[9, 8, 7]
>>> a=[1,2,3,1,2,3,1,2,3] # 请将奇数坐标的值累加
>>> result=0
>>> for i in range(len(a)):
...     if i % 2 != 0:
...         result += a[i]
...
>>> result
8

2.3 更新列表

>>> a
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> a[0]=[100,200]
>>> a
[[100, 200], 2, 3, 1, 2, 3, 1, 2, 3]
>>> a[-2]=1000
>>> a
[[100, 200], 2, 3, 1, 2, 3, 1, 1000, 3]

2.4 删除列表

使用 del 语句来删除列表的元素或整个列表。
使用remove()移除列表中的元素
>>> a.remove(1000)
>>> a
[[100, 200], 2, 3, 1, 2, 3, 1, 3]
>>> a.remove(1000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> del a[-1]
>>> a
[[100, 200], 2, 3, 1, 2, 3, 1]
>>> del a[2:5]
>>> a
[[100, 200], 2, 3, 1]
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

# 生成一个新列表,只保留每个单词的首位和尾位字母

word_list = ["glory","road","football"]

result = []
for i in word_list:
	result.append(i[0]+i[-1])

print(result)
# 方法2
result = []
for i in word_list:
	result.append(i[0::len(i)-1])

print(result)
#方法3
result = []
for i in word_list:
	i = list(i)
	del i[1:-1]
	result.append("".join(i))

print(result)

# 方法4
result = []
for i in word_list:
	t = ""
	for j in range(len(i)):
		if j==0 or j== len(i)-1:
			t += i[j]
	result.append(t)

print(result)

2.5 列表运算符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表
>>> len("ab")
2
>>> len([1,2,3])
3
>>> [1]*10
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> 3 in [1,2,3]
True
>>> [1,2,3] + ['a','b']
[1, 2, 3, 'a', 'b']

2.6 列表函数&方法

len(list) 列表元素个数
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list(seq) 将元组 / 字符串转换为列表
>>> max([1,2,3,4])
4
>>> min([1,2,3,4])
1
>>> list("abc")
['a', 'b', 'c']

# 三个数,找到最小值

# 三个数,找到最小值
def get_min_num(a,b,c):
	min_num = a
	if a>b:
		min_num = b
	else:
		min_num = a
	if min_num > c:
		min_num = c
	return min_num

get_min_num(2,4,6)

# 请将3个数字排序

def sort_num(a,b,c):
	if a > b:
		if a > c:
			if b>c:
				print(a,b,c)
			else:
				print(a,c,b)
		else:
			print(c,a,b)
	else: #a<b
		if a > c:
			print(b,a,c)
		else:#a<c
			if b>c:
				print(b,c,a)
			else:
				print(c,b,a)

# 方法1 也可以这样写
def sort_num(a,b,c):
	if a>b and a>c:
		if b>c:
			print(a,b,c)
		else:
			print(a,c,b)
	if a>b and a<c:
		print(c,a,b)
	if a>c and a<b:
		print(b,a,c)
	if a<b and a<c:
		if b>c:
			print(b,c,a)
		else:
			print(c,b,a)

#方法2
def sort_num(a,b,c):
	# 找到最小的,从列表中删除
	min_num=get_min_num(a,b,c)
	l = list(a,b,c)
	l.remove(min_num)
	
	# 比较剩下的2个
	if l[0]>l[1]:
		second = l[1]
		last = l[0]
	else:
		second = l[0]
		last = l[1]
	return last,second,min_num

# 方法3
def sort_num(a,b,c):
	if a<b:
		a,b=b,a # 找到2个数中较大的放到a
	if a<c:
		a,c=c,a #把最大数放到a
	if b<c:
		b,c=c,b #把次大数放到b
	print(a,b,c)

2.7列表操作函数

序号

方法

作用

1

append(obj)

在列表的末尾添加对象obj

2

insert(index,obj)

在index处插入对象obj,如果index指定的下标越界的话会将obj放在列表的最后

3

pop(index)

移除列表中的一个元素并返回该元素的值(默认是最后一个)

4

remove(obj)

移除列表中第一次出现的obj,一次只能删除一个

5

index(obj)

从列表中找出obj出现的第一个位置,未找到抛异常

6

count(obj)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值