Python入门——四大容器解析

四大容器解析

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
在Python中,有四大数据结构:列表List、元组Tuple、集合Set、字典Dict
因为软件需要大量的代码去解决需求,简单的代码不一定能解决问题,四大数据结构的结合调用可以完成需要的功能。

一.列表 List

1.什么是列表?
是一种线性表,结构为线性结构。由大量的节点组成,每一个节点都能存储大量的数据。
2.语法结构
通过一对方括号包含起来的数据序列,可以存放重复数据。
因为列表本身是对象,可以进行嵌套处理。
3.如何使用列表/定义列表?

> a = list()      #创建了一个空链表
> a
[]
> type(a)
< class 'list'>
> help(list)

4.如何访问列表中的元素?
通过下标,下标从0开始。
注意:如果下标越界了会报错

> a = ([2,4,5,6])
> a
[2, 4, 5, 6]
> a[2]
5

5.遍历元素
for 变量 in 容器:
变量代码中的一个确定的元素

> b
> [1,2,3,4,5,6]
> for i in b:
...	print(i)
...	
1
2
3
4
5
6

6.列表的长度问题
方法一:全局函数len()

> a
[1,5,6,9]
> b
[1,2,3,4,5,6]
> len(a)
4
> len(b)
6

方法二:使用while循环遍历

> index = 0
> a
[2,4,5,6,7,8,9]
> while index < len(a):
...	print(a[index])
...	index += 1
...
2
4
5
6
7
8
9

7.列表的常用指令
常用: ‘append’, ‘clear’,‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’
(1)在列表末尾添加一个新元素:append()

>>> a = [2,5,6,7,8,9,10]
>>> a
[2, 5, 6, 7, 8, 9, 10]
>>> a.append(100)
>>> a
[2, 5, 6, 7, 8, 9, 10, 100]
>>> len(a)
8

(2)清空列表所有信息:clear()

>>> a.clear()
>>> a
[]

(3)复制列表(浅拷贝):copy()
这里要分清拷贝和引用传递!

>>> a = [2,5,6,7,8,9,10]
>>> a.copy()
[2, 5, 6, 7, 8, 9, 10]
>>> aa = a.copy()
>>> aa
[2, 5, 6, 7, 8, 9, 10]

(4)统计元素在列表中的个数:count()

>>> b=[2,2,2,3,4,4,4,5,4,5,7,7,7,7,7,7]
>>> b.count(7)
6
>>> b.count(4)
4

(5)查询元素在列表中第一次出现的下标位置:index()
注意:如果列表不存在该元素,则抛出异常;
下标从0开始!

>>> b=[2,2,2,3,4,4,4,5,4,5,7,7,7,7,7,7]
>>> b.index(4)
4
>>> b.index(7)
10
>>> b.index(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 8 is not in list

(6)指定要插入的元素的位置:insert()

>>> b.insert(2,"2333333")
>>> b
[2, 2, '2333333', 2, 3, 4, 4, 4, 5, 4, 5, 7, 7, 7, 7, 7, 7]
insert和append的区别:append是在末尾加,insert可以确认添加位置。
>>> b.append("lzzx")
>>> b
[2, 2, '2333333', 2, 3, 4, 4, 4, 5, 4, 5, 7, 7, 7, 7, 7, 7, 'lzzx']

(7)通过下标来移除元素:pop()
没有下标会默认删除最后一个

>>> b
[2, 2, '2333333', 2, 3, 4, 4, '886886', 4, '886886', 5, 4, 5, 7, 7, 7, 7, 7, 7, 'lzzx']
>>> b.pop(3)
2
>>>
>>> b
[2, 2, '2333333', 3, 4, 4, '886886', 4, '886886', 5, 4, 5, 7, 7, 7, 7, 7, 7, 'lzzx']

(8)移除对应的元素:remove()
如果列表中不存在该元素,则抛出异常。

>>> b
[2, 2, 3, 4, 4, '886886', 4, '886886', 5, 4, 5, 7, 7, 7, 7, 7, 'lzzx']
>>> b.remove("886886")
>>> b
[2, 2, 3, 4, 4, 4, '886886', 5, 4, 5, 7, 7, 7, 7, 7, 'lzzx']

(9)翻转元素的顺序:reverse()

>>> b
[2, 2, 3, 4, 4, 4, '886886', 5, 4, 5, 7, 7, 7, 7, 7, 'lzzx']
>>> b.reverse()
>>> b
['lzzx', 7, 7, 7, 7, 7, 5, 4, 5, '886886', 4, 4, 4, 3, 2, 2]

(10)排序(主要针对数字):sort()

>>> b
[7, 7, 7, 7, 7, 5, 4, 5, 4, 4, 4, 3, 2, 2]
>>> b.sort()
>>> b
[2, 2, 3, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7]

(11)合并列表:extend()

>>> b
[2, 2, 3, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7]
>>> a
[2, 5, 6, 7, 8, 9, 10, 1000]
>>> a.extend(b)
>>> a
[2, 5, 6, 7, 8, 9, 10, 1000, 2, 2, 3, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7]
>>> b
[2, 2, 3, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7]

二.元组 Tuple

1.什么是元组?
元组在Python中,其实是列表的一种特殊形式,一旦声明创建就不允许改变。
2.语法结构
使用一对圆括号包含起来的一组数据,可以存放重复数据。

name = ('仁',"义","礼","智","信");
name
('仁', '义', '礼', '智', '信')
name[2] #可以通过索引查找对应的值
'礼'

3.如何定义元组?
在定义元组时,如果只有一个元素,那么一定要在该元素后加一个逗号,否则Python解释器将该元组当成一个数字对待。

>>> d = tuple((1,3,5,7,9))
>>> d
(1, 3, 5, 7, 9)

4.元组的常用指令
count、index
5.特点
元组中如果存放的是其他的内容可变的话,一定要注意此时的元组中对象的数据是可变的。

group = ("孙悟空","唐僧","沙僧",['猪八戒','高老庄']);
group
('孙悟空', '唐僧', '沙僧', ['猪八戒', '高老庄'])
group[3][0]="如来"#因为第四个参数是 list,可以变化,所以能修改

三.集合

1.集合的特点
①.和列表相似,但是不能存储相同数据;
②.存放没有顺序,也就是没有下标。
2.语法结构
使用一对大括号/花括号包含起来的数据。

han = {"刘备","曹操","孙权"};
han
{'曹操', '刘备', '孙权'}

3.如何定义集合?
用花括号的不一定都是set,否则定义的是dict。

>>> c = set((222,333,444,555,666))
>>> c
{555, 333, 666, 444, 222}

4.集合的常用指令
(1)添加:add()

>>> c
{555, 333, 666, 444, 222}
>>> c.add(111111)
>>> c
{111111, 555, 333, 666, 444, 222}

(2)清除:clear()
(3)拷贝:copy()
(4)求差集:difference()

>>> c
{333, 666, 444, 222}
>>> ccc = set((123,456,789,333,666))
>>> ccc
{456, 333, 789, 666, 123}
>>> c.difference(ccc)
{444, 222}

(5)求交集:intersection()

>>> c.intersection(ccc)
{666, 333}

(6)求并集:union()

>>> c.union(ccc)
{456, 333, 789, 666, 123, 444, 222}

(7)随机移除,一般不用:pop()

>>> c.pop()
111111
>>> c
{555, 333, 666, 444, 222}
>>> c.pop()
555
>>> c
{333, 666, 444, 222}

(8)移除元素:remove()
不存在的元素被输入会报错
(9)移除元素:discard()
不存在的元素被输入不会报错。

>>> c
{333, 666, 444, 222}
>>> c.discard(666)
>>> c
{333, 444, 222}
>>> c.discard(888)
>>>
>>> c
{333, 444, 222}

四.字典 Dict

提供了一种特殊的存储数据的组合数据类型,key-value:变量-值。
Python中的字典类型,key必须是字符串。
1.字典的定义

>>> c={}
>>> c
{}
>>> type(c)
<class 'dict'>
>>> c = dict({"name":"jay","age":"41"})
>>> c
{'name': 'jay', 'age': '41'}

2.字典的常用指令
(1)修改制定数据

>>> c["name"] = "mingzi"
>>> c
{'name': 'mingzi', 'age': '41'}

(2)访问元素
若元素不存在,则增加这个值。

>>> c["name"]
'mingzi'
>>> c["wife"] = "kunling"
>>> c
{'name': 'mingzi', 'age': '41', 'wife': 'kunling'}

(3)清除:clear()
(4)拷贝:copy()
(5)查找:get()
通过key或者该key对应的值,如果没有这个key,则返回None。

>>> c.get("name")
'mingzi'
>>> c.get("dad")
>>>

(6)成对返回键值对:items()

>>> c.items()
dict_items([('name', 'mingzi'), ('age', '41'), ('wife', 'kunling')])

(7)返回所有的key:keys()

>>> c.keys()
dict_keys(['name', 'age', 'wife'])

(8)返回所有的值:values()

>>> c.values()
dict_values(['mingzi', '41', 'kunling'])

(9)删除:pop()
通过key,删除对应的键值对,如果该键不存在,则抛出异常。

>>> c.pop("name")
'mingzi'
>>> c
{'age': '41', 'wife': 'kunling'}

(10)移除:popitem()
移除一个键值对,按照LIFO规则(last in first out)。

>>> c
{'age': '41', 'wife': 'kunling'}
>>> c.popitem()
('wife', 'kunling')
>>> c
{'age': '41'}

3.字典的迭代
方法一:
for k in d2:
print(k,d2[k])

>>> for k in c:
...     print(k,c[k])
...
name mingzi
age 41
wife kunling

方法二:(与方法一本质一样)
for key in d2.keys():
print(k, d2[k])

方法三:
for k,v in d2.items():
print(k, v)

>>> for k,v in c.items():
...     print(k,c[k])
...
name mingzi
age 41
wife kunling

以上四种数据类型的比较
元组 Tuple 是存放固定的数据
集合 Set 中的数据插入和遍历的时间,随数据增多而变慢
列表 List 中的数据插入和查询的时间,随数据的增多而变慢
字典 Dict 中的数据插入和查询的速度非常快,不会因为数据太多而变慢

元组、集合和列表占用内存较少,字典占用内存较多,字典是一种通过占用空间来换取操作速度的一种数据类型。

发布了5 篇原创文章 · 获赞 9 · 访问量 297

猜你喜欢

转载自blog.csdn.net/weixin_46169495/article/details/104430382