python序列和字典

本文介绍了Python中的序列类型,包括字符串、列表和元组,详细讲解了它们的特性、操作符、内建函数和常见操作。同时,深入探讨了字典的创建、访问、修改和删除元素,以及集合(set)的基础知识。内容涵盖序列的比较规则、切片、内建函数如`len`、`max`、`min`等,以及字典的键值对操作和集合的交并差操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


序列:

  • 字符串
  • 列表
  • 元组

列表中的顺序很重要。

公共特性

标准类型操作符

<、>、<=、>=、==、!= 比较规则是序列的顺序依次比较,如果类型不匹配直接抛异常。

序列类型操作符:

  • in、not in时间复杂度是O(n)
a = [1,2,3,4]
print(1 in a)
  • 连接操作符(+)把两个相同类型的序列进行连接,不高效,创建新对象,把原有对象拷贝进去
  • 重复操作符(*):让一个序列重复N次

序列切片操作

[ ],[:],[::]通过下标访问其中的一个元素,或者某个子序列。越界会抛异常

  • [:] 从开始取到尾
  • [0:3]或[:3] 从0到下标3,包含0不包含3
  • [::2] 步长是2,每隔一个元素取一个元素
  • [::-1] 序列逆置

序列内建函数

  • len:返回序列的长度
  • max:返回序列中的最大值
  • min:返回序列中的最小值
  • sorted:排序,返回一个有序的序列(输入参数的副本,不修改原序列),支持自定制规则:逆置,按绝对值排序
  • sum:序列中的元素求和(元素都是数字)
  • zip:拉链,行列互换,每个元素都是元组,拉到最短的地方截止

字符串

单引号和双引号等效
三种引号的区别:三引号可以跨行
只有列表和字典是可变对象,字符串是不可变对象,只能把标签撕下来,贴在另外的对象上
比较规则按字典序

x = 10
y = 20
a = f 'x = {x}, y = {y}'
print(a)

原始字符串:a = r ‘hello \n world’

  • 字符串合并join
a = ['aaa', 'bbb','ccc']
print(' '.join(a))
#执行结果
'aaa bbb ccc'
  • 切分split
a = 'aa bb cc'
print(a.split(' '))
#执行结果
['aa', 'bb', 'cc']
  • 去掉字符串开头结尾的空白(空格,换行,制表符)strip
a = '       hello world'
print(a.strip())
#执行结果
hello world
print(a.lstrip())
print(a.rstrip())
  • 对齐ljust、rjust、ljust
a = 'hello world'
print('['+a.ljust(30)+']')
print('['+a.rjust(30)+']')
print('['+a.cjust(30)+']')
  • 判定字符串是字母/数字
a = 'hello'
print(a.isalpha())
b = '1234'
print(b.isdigit())
#执行结果
True
True
  • 转换大小写
print(a.lower())
print(a.upper())
  • 查找子串
a = 'hello world'
print(a.find('world'))
print('world' in a)
  • 替换
#创建新的字符串
print(a.replace('world','hehe'))

列表

  • append:追加元素
    a.append(b),二维列表
    a.extend(b),类似于a+=b
  • 指定位置插入元素:a.insert(1,100)
  • 删除指定下标元素 del(a[0])
  • 按值删除元素a.remove(1)
  • a.pop(-1),删除最后一个元素(默认值是-1,填其他的值就是删对应下标的值)
  • 原地翻转列表:a.reverse(),修改原列表
  • 排序:sort(),原地排序

列表的深拷贝浅拷贝

a = [10, 20, 30, 40]
b = a   #浅拷贝

import copy
b = copy.deepcopy(a) #深拷贝,深拷贝只能针对可变对象使用

写时拷贝

真正触发修改时,才触发深拷贝

元组

  • 大多是操作和列表类似
  • 元组是只读的,reverse,sort,append,extend都不支持
  • 一个值接收函数的多个返回值,这个值就变成了元组
  • a = (10,),此时a是元组
  • a = (10+20)*3,此时a是一个int
  • 元组两个重要应用场景:传参时避免参数被函数修改,元组是可hash的元组可作为字典的key,列表不行
  • 元组里面包含了可变对象,这个对象还是可以改变的

字典

映射类型数据,增删查改都是O(1)

创建字典

  • {}
  • 工厂方法dict
a = {
	10: 20,
	'key', 'value',
	'a': 100
}
a = dict((['x', 1], ['y', 2]))

字典的key必须是hash,不可变是可hash的必要条件。
元组是可hash的:print(hash((10, 20)))
字符串的hash算法:md5/sha1

访问字典元素

for key in a:
	print(key, a[key])

print (a[key])

修改字典元素

a[key] = value2
#使用[ ]可新增/修改字典元素

删除字典元素

a = {1: 100}
del (a[1])
print(a)
  • hash线程安全问题
  • 协程:手动进行调度,比线程更轻量
  • 字典比较:长度—key—value
  • 取出所有的key,print(a.keys())
  • 取出所有的value,print(a.values())
  • 取出一个列表,print(a.items())

集合set

集合没有顺序的差异,基于hash表(底层是字典),交集,并集,差集,对称差集

a = set([1,2,3,4])
a = set([3,4, 5])
print(a&b) #交集 3 4
print(a | b) #并集 1 2 3 4 5
print(a - b) #差集 1 2 
print(a ^ b) #对称差集  1 2 5

集合数据不能重复,会自动去重

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值