Python基础
列表与元组
列表 list
定义
list是一种有序的集合,可以随时添加和删除其中的元素。
# 初始化一个列表
L = []
# 定义一个包含三个同学名字的列表
Students = ['Michael', 'Bob', 'Tracy']
list中的元素可以是多种类型的,list的元素也可以是一个list
s = ['python', 'java', ['asp', 'php'], 1]
常用方法
- 获得list元素的个数:len()
print(len(Students))
- 用索引来访问list中每一个位置的元素
list索引从0开始
# 访问列表第一个元素:
print(Students[0])
# 访问列表第二个元素:
print(Students[1])
# 访问列表最后一个元素:
print(Students[2])
print(Students[len(Students)-1])
print(Students[-1]) # 倒数第二个元素的索引可以为-2,以此类推
- 添加元素
(1)添加到末尾
Students.append('Adam')
print(Students)
# 输出结果:
['Michael', 'Bob', 'Tracy', 'Adam']
(2)添加到指定索引位置
Students.insert(1, 'Jack')
print(Students)
# 输出结果:
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
- 删除元素
(1)删除末尾元素
Students.pop()
print(Students)
# 输出结果
['Michael', 'Jack', 'Bob', 'Tracy']
(2)删除指定索引位置的元素
Students.pop(1)
print(Students)
# 输出结果
['Michael', 'Bob', 'Tracy']
元组 tuple
定义
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。
# 初始化一个元组
t = ()
# 定义一个包含三个同学名字的元组
Students = ('Michael', 'Bob', 'Tracy')
# 定义只有一个元素的元组
n = (1,)
⚠️在定义只有一个元素的元组时,元素后面要写逗号",",用于区分数学小括号运算。
元组中的元素可以是一个列表,元组指向的列表不能变,但是列表中的元素可变。
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
# 输出结果
('a', 'b', ['X', 'Y'])
⚠️本质上是列表的元素可变,元组指向的元素不可变
字典与集合
字典 dict
定义
使用键-值(key-value)存储,具有极快的查找速度。
# 定义一个学生名字对应成绩的字典
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print(d['Michael'])
# 输出结果
95
⚠️dict的key必须是不可变对象。
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉。
如果key不存在,dict就会报错。
判断key是否在字典里的方法:
- 通过in判断:
print('Thomas' in d)
# 输出结果
False
- get()方法:
(1)不指定key的value,如果d中不存在key就会返回None
print(d.get('Thomas'))
# 输出结果
None
(2)任意指定key的value,如果d中不存在key就会返回指定的value
print(d.get('Thomas', -1)) # 最好是指定一个可以与原字典区分的值,比如上面的d中的值是表示成绩不能为负数,这里指定负数就可以区分
# 输出结果
-1
常用方法
- 添加键值对
# 直接赋值
d['Thomas'] = 80
print(d)
# update方法
d.update({'Lucy': 90})
print(d)
# 推导法
keys = ['key3', 'key4']
values = ['value3', 'value4']
my_dict = {k: v for k, v in zip(keys, values)}
print(my_dict)
# 输出结果
{'Michael': 95, 'Bob': 75, 'Tracy': 85, 'Thomas': 80}
{'Michael': 95, 'Bob': 75, 'Tracy': 85, 'Thomas': 80, 'Lucy': 90}
{'key3': 'value3', 'key4': 'value4'}
- 删除键
d.pop('Thomas')
print(d)
# 输出结果
{'Michael': 95, 'Bob': 75, 'Tracy': 85, 'Lucy': 90}
与list比较
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
集合 set
定义
set也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
s={1,2,3}
print(s)
# 输出结果
{1, 2, 3}
常用方法
- 添加元素
s.add(4)
- 删除元素
s.remove(4)
- 交集和并集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
# 交集
print(s1 & s2)
{2, 3}
# 并集
print(s1 | s2)
{1, 2, 3, 4}
模式匹配
定义
用match代替if进行判断,可以简化代码增加可读性
score = 'B'
if score == 'A':
print('score is A.')
elif score == 'B':
print('score is B.')
elif score == 'C':
print('score is C.')
else:
print('invalid score.')
用match改写:
score = 'B'
match score:
case 'A':
print('score is A.')
case 'B':
print('score is B.')
case 'C':
print('score is C.')
case _: # _表示匹配到其他任何情况
print('score is ???.')
复杂匹配
age = 15
match age:
case x if x < 10:
print(f'< 10 years old: {x}')
case 10:
print('10 years old.')
case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:
print('11~18 years old.')
case 19:
print('19 years old.')
case _:
print('not sure.')
匹配列表
args = ['gcc', 'hello.c', 'world.c']
# args = ['clean']
# args = ['gcc']
match args:
# 如果仅出现gcc,报错:
case ['gcc']:
print('gcc: missing source file(s).')
# 出现gcc,且至少指定了一个文件:
case ['gcc', file1, *files]:
print('gcc compile: ' + file1 + ', ' + ', '.join(files))
# 仅出现clean:
case ['clean']:
print('clean')
case _:
print('invalid command.')