Python中的列表与元组

列表与元组

列表 list

定义

list是一种有序的集合,可以随时添加和删除其中的元素。

# 初始化一个列表
L = []
# 定义一个包含三个同学名字的列表
Students = ['Michael', 'Bob', 'Tracy']

list中的元素可以是多种类型的,list的元素也可以是一个list

s = ['python', 'java', ['asp', 'php'], 1]

常用方法

  1. 获得list元素的个数:len()
print(len(Students))
  1. 用索引来访问list中每一个位置的元素
    list索引从0开始
# 访问列表第一个元素:
print(Students[0])
# 访问列表第二个元素:
print(Students[1])
# 访问列表最后一个元素:
print(Students[2])
print(Students[len(Students)-1])
print(Students[-1])  # 倒数第二个元素的索引可以为-2,以此类推
  1. 添加元素
    (1)添加到末尾
Students.append('Adam')
print(Students)
# 输出结果:
['Michael', 'Bob', 'Tracy', 'Adam']

(2)添加到指定索引位置

Students.insert(1, 'Jack')
print(Students)

# 输出结果:
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
  1. 删除元素
    (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是否在字典里的方法:

  1. 通过in判断:
print('Thomas' in d)

# 输出结果
False
  1. 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

常用方法

  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'}
  1. 删除键
d.pop('Thomas')
print(d)

# 输出结果
{'Michael': 95, 'Bob': 75, 'Tracy': 85, 'Lucy': 90}

与list比较

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

集合 set

定义

set也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

s={1,2,3}
print(s)

# 输出结果
{1, 2, 3}

常用方法

  1. 添加元素
s.add(4)
  1. 删除元素
s.remove(4)
  1. 交集和并集
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.')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢磊磊学IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值