Python基础数据结构

在leetcode刷完题后,发现python很多的数据结构里内置了函数来实现一些功能,因此今天来重温一下Python的基础数据机构。本文章参考了如下文章:Python基础篇:Python的数据结构Python collections 模块以及Python官方文档
一、列表
最基本的就是列表(list),使用方括号来表示。
针对列表的内置操作有很多,比如append,extend,insert,remove,pop,index,count,sort,reverse,copy等等。下面是一个个的示例:
1.append。增加操作,默认增加到列表的末尾

l = ['messi','cr7','muller','klose','kimmich','messi','musiala','muller']
l
#['messi', 'cr7', 'muller', 'klose', 'kimmich', 'messi', 'musiala', 'muller']
l.append('davis')
#['messi', 'cr7', 'muller', 'klose', 'kimmich','messi', 'musiala', 'muller', 'davis']

2.extend。通过迭代器延伸列表

cb = ['lahm','hector']
l.extend(cb)
l
#['messi', 'cr7', 'muller', 'klose', 'kimmich', 'messi', 'musiala', 'muller', 'davis', 'lahm', 'hector']

注意区分extend&append
extend在列表末尾追加的,可以是列表、元组、集合或者字典

fw = ('james','robben')
l.extend(fw)
l
#['neymar','musiala', 'muller', 'muller', 'messi', 'messi', 'klose', 'kimmich', 'davis', 'cr7', 'james', 'robben']
cm = {'kroos','vidal'}
l.extend(cm)
l
#['neymar','musiala', 'muller', 'muller', 'messi', 'messi', 'klose', 'kimmich', 'davis', 'cr7', 'james', 'robben','vidal','kroos']
dic = {'messi':'argentina'}
l.extend(dic)
l
#['neymar','musiala', 'muller', 'muller', 'messi', 'messi', 'klose', 'kimmich', 'davis', 'cr7', 'james', 'robben','vidal','kroos','messi']

而append则是将新序列当做一个整体添加到列表末尾

dic = {'messi':'argentina'}
l.append(dic)
l
#['neymar','musiala', 'muller', 'muller', 'messi', 'messi', 'klose', 'kimmich', 'davis', 'cr7', 'james', 'robben','vidal','kroos','messi',{'messi': 'argentina'}]

3.copy。拷贝,注意这里有浅层拷贝和深层拷贝。浅拷贝的意思是只复制过去了地址,而深层拷贝是复制了值过去
列表的第一层实现了深拷贝,但是内嵌套的列表,仍然是浅拷贝。

mat = [1,2,[1,2,3]]
l2 = mat.copy()
l2[0] = 2
print(mat)
print(l2)
l2[2][0] = 3
print(mat)
print(l2)
'''
[1, 2, [1, 2, 3]]
[2, 2, [1, 2, 3]]
[1, 2, [3, 2, 3]]
[2, 2, [3, 2, 3]]
'''

若要保证得到的新列表与原列表无关,那么我们可以使用deepcopy()。

mat = [1,2,[1,2,3]]
l2 = mat.deepcopy()
l2[0] = 2
print(mat)
print(l2)
l2[2][0] = 3
print(mat)
print(l2)
'''
[1, 2, [1, 2, 3]]
[2, 2, [1, 2, 3]]
[1, 2, [1, 2, 3]]
[2, 2, [3, 2, 3]]
'''

剩余操作在此不一一列举了。
此外,列表作为线性表,可以实现许多常见数据结构的操作,比如队列、栈等。此时可以借助python内置的collections模块,提供了许多方便且高效的集合操作。
1.namedtuple()
相当于直接定义了一个类,返回一个新的元组

import collections
player = collections.namedtuple('player',['age','country'])
p = player(20,'germany')
print(p)
print(p.age)
#player(age=20, country='germany')
#20

此外,namedtuple还支持直接转换为字典或者tuple对象

p = player(11,'China')
p = p._asdict()
p
#{'age': 11, 'country': 'China'}

2.deque
更快地进行队列或者栈的增减操作

q.append(4)
print(q)
q.popleft()
print(q)
q.appendleft(5)
print(q)
'''
deque([2, 4, 5, 4, 4, 4, 4])
deque([4, 5, 4, 4, 4, 4])
deque([5, 4, 5, 4, 4, 4, 4])
'''

3.Counter。可以理解为一个计数器,统计迭代器中每个元素出现的次数

m = 'abcdefabcdefff'
m = collections.Counter(m)
print(m)
print(m.most_common(2))
#Counter({'f': 4, 'a': 2, 'b': 2, 'c': 2, 'd': 2, 'e': 2})
#[('f', 4), ('a', 2)]

二、元组
元组用圆括号表示,但是元组中的元素不可变。

t = ('1','a',123465)
print(t[0])
t[0] = 123
'''
1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_13544\1586098808.py in <module>
      1 t = ('1','a',123465)
      2 print(t[0])
----> 3 t[0] = 123

TypeError: 'tuple' object does not support item assignment
'''

三、集合
集合用花括号表示,集合中的元素是不可重复的。考虑到与字典的花括号会重叠,因此创建空集合时要用set()
此外,支持一些集合运算

country = {'germany','China','germany','japan'}
print(country)
c = 'musiaala'
print(set(c))
#{'germany', 'China', 'japan'}
#{'s', 'u', 'i', 'm', 'a', 'l'}

四、字典
字典用花括号表示,以键-值的方式存储。删除操作用del,添加操作直接以赋值方式。初始化时可以用{},也可以用dict()对象初始化
遍历字典时,可以用items()来获取字典的关键字和值

dic = {'name':'muller','country':'Germany','club':'Bayern'}
print(dic)
dic['sex'] = 'man'
print(dic)
del dic['sex']
for key,value in dic.items():
    print(key,value)
'''
{'name': 'muller', 'country': 'Germany', 'club': 'Bayern'}
{'name': 'muller', 'country': 'Germany', 'club': 'Bayern', 'sex': 'man'}
name muller
country Germany
club Bayern
'''

未完待续~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值