python之3核心数据结构

3.1 列表list
list列表是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合,在这种数据结构上进行的基本操作包括对元素的的查找,插入,和删除.

在python中,使用方括号[]表示列表
成员有序且可重复出现

列表常见的操作

操作说明
list.append(obj)在列表后面新增元素
del list[i]删除元素
len(list)求列表长度
list[i]读取第i个元素
list[-i]读取倒数第i个元素
list[i,j]从第i个元素截取
list.index(objc)从列表中找出某个值第一次出现的地方
list.index(i,obj)在第i个元素的位置插入元素
list.pop(i)移除第i个元素,并返回其值

3.2 集合set
在python中,使用花括号{}或set()函数创建集合
注意:当我们要创建一个空集合的时候,只能用set()进行创建,因为{ }表示的是空的字典

成员无序且不可重复出现

集合常见的操作

操作说明
set.add(item)往集合里添加一个元素
set.update(item)往集合里添加元素,item是可迭代对象,如,列表、元组、字典等
set.remove(item)将元素item从集合set中移除,如果元素不存在,则会发生错误
set.discard(item)将元素item从集合set中移除,如果元素不存在,不会发生错误
set.pop()随机取出并删除一个元素
set.len()计算集合个数
set.clear()清空集合
union取两个集合的并集
my_set = {1, 2, 3}
print(my_set)
{1, 2, 3}

my_set = {6, 7, 8}
print(my_set)
{8, 6, 7}

元素往set里存储前,会计算hash值,这个hash值决定了其存储的位置,且刚开始会创建8个元素的位置
在这里插入图片描述
3.3 元组tuple
Python 的元组与列表非常相似,不同之处在于元组的元素不能修改、整个元组也不能变动。
在Python中,元组使用小括号( ),如,tup = (1, 2, 3)

注意:
当我们要创建一个只有一个元素的元组的时候,在元素后面要加一个逗号,如:tup = (1,)而不能使用(1)

(因为在Python中,( )也可以作为运算时的符号,如果不将单一元素的元组跟数学运算加以区分,那么解
析器会傻傻分不清

元组常见的操作

操作说明
新增元素不允许
修改元素不允许
删除某个元素不允许
tup[i]获取第i个元素
tup[-i]获取倒数第i个元素
ttup[i:j]从第i个元素起到第j个元素

注意:元组里面如果存储了列表,其列表里的值可以修改
如,

tup = (1, 2, 3, ["111", "222", "333"])
tup[-1][0] = "444"
print(tup)

输出:(1, 2, 3, [‘444’, ‘222’, ‘333’])

3.4 字典dict
在Python中,字典类型可存储任意类型对象,它用于存放具有映射关系的数据。其映射关系通过key:value的形式体现。在Python中使用,key,valuekey:value的形式存在,同样通过大括号{ }包裹,每个键值对通过逗号分隔,形式如下
{key1 : value1, key2 : value2 }

操作说明
update({1:2})新增元素
dict[‘key’]通过key获取对应的值,如果没对应key,会报错
dict[‘key’]=123修改key对应的值
del dict[‘key’]删除一个key及其对应的value值
del dict清空整个字典
len(dict)字典元素个数

字典特性:

  • 在字典中,key不能重复,如果放入相同的key,后者的值会覆盖前者
  • 在字典中,key必须是不可变的

3.5 range类型

  • range() 函数返回的是一个可迭代对象(是对象类型),而不是列表类型, 所以打印的时候不会打印列表。
print(range(6))

输出结果: range(0, 6)

  • 如果想把range对象变成列表,可以使用list()函数对range进行处理
print(list(range(6)))

输出结果: [0, 1, 2, 3, 4, 5]

  • range函数的基本语法
    range(stop)
    range(start, stop, step)

    start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
    stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
    step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
print(list(range(1, 6, 2)))
print(list(range(-11, -6)))
print(list(range(1, -6, -1)))

输出结果: [ 1, 3, 5]
[-11, -10, -9, -8, -7]
[1, 0, -1, -2, -3, -4, -5]

3.6 可变与不可变类型
可变与不可变是相对于内存里的那块地方是否可以改变,通俗点讲,就是内存中对应的地址在值发生变动的时候会不会变。地址不变时,为可变对象,变动时,为不可变对象

  • 可变类型:列表、字典
  • 不可变类型:数字、字符串、元组
a = 1
print(id(a))
a = a + 1
print(id(a))

输出结果:
140734638482064
140734638482096

a = [1, 2, 3]
print(id(a))
a.append(4)
print(id(a))

输出结果:
2935304970888
2935304970888

tup = (1, 2, 3, ["111", "222", "333"])
tup[3][0] = "444"
print(tup)

其中元组中存储的list中的值可以修改,是因为,list的地址里存的都是实际内容的指针,此时元组的内容指向list地址,而无论list的内容如何变更,list的地址也不会变,所以并不违背元组里存储的元素不能变这样一个原则。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

uncle_Huang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值