容器解析

本文详细介绍了Python中的四种容器类型:list、set、tuple和dict。针对每种容器,阐述了其特点、创建方式、常用操作及应用场景,帮助读者深入理解Python数据结构。

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

#容器是一种存储大量数据的一种数据类型。
#python中提供了四种容器,分别是:list(列表)、set(集合)、tuple(元组)、dict (字典)
一、list
list是一种线性结构的存储空间。列表是Python中最具有灵活性的有序集合对象类型,与字符串不同的是,列表可以包含任何种类的对象:数字、字符串、甚至是列表。同样,与字符串不同的是,列表是可变对象,他们都支持在原处修改的操作,同样列表的长度是可变的。
1、列表的创建方式
<1>直接指定元素

>>> [1,2,3,4,5]
>>> l = [1,2,3,4,5]

<2>指定长度但不指定元素,相当于创建一个长度为n但不存任何数据对象地址的空列表。

>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]

<3>通过list函数将其他的数据转换为列表,这些数据必须是可迭代的,可迭代的就是可以被for循环操作。

>>> list() # 得到一个长度为0的列表
[]
>>> l = list("abcd")
>>> l
['a', 'b', 'c', 'd']
>>> l[0]
'a'
>>> l[-1]
'd'
>>> l = list(range(0,5))
>>> l
[0, 1, 2, 3, 4]
>>> l  =list(1234)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

2、列表的特有操作
<1>修改元素

>>> l
[0, 1, 2, 3, 4]
>>> l[0]=5
>>> l
[5, 1, 2, 3, 4]

<2>删除操作

>>> l
[1, 2, 3, 666, 888, 999, 8, 9]
>>> del l[3]
>>> l
[1, 2, 3, 888, 999, 8, 9]
>>> del l[-3]
>>> l
[1, 2, 3, 888, 8, 9]
>>> del l # 删除列表对象 连着变量也一同删除
>>> l
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'l' is not defined

3、常见的使用方法
<1>append():在列表的表尾添加一个元素对象

>>> l = [1,2,3]
>>> l.append(4)
>>> l
[1, 2, 3, 4]
>>> l1 = [1,2,3,4]
>>> l2 = [5,6,7,8]
>>> l1.append(l2)
>>> l1
[1, 2, 3, 4, [5, 6, 7, 8]]
>>> l1.append("abc")
>>> l1
[1, 2, 3, 4, [5, 6, 7, 8], 'abc']

<2>clear():清空列表,不代表删除列表对象

>>> l.clear()
>>> l
[]

<3>copy():复制一份新的列表对象,与原列表内容一致,将新列表的地址返回

>>> l1 = [1,2,3,4]
>>> l2 = l1
>>> l2[0] = 5
>>> l1
[5, 2, 3, 4]
>>> l2 = l1.copy()
>>> l1
[5, 2, 3, 4]
>>> l2
[5, 2, 3, 4]
>>> l2[0]=10
>>> l1
[5, 2, 3, 4]
>>> l2
[10, 2, 3, 4]

<4>count():计算某个元素在列表出现的次数

>>> l = [1,1,2,3,1,2,3,4,3,2,1,1,2]
>>> l.count(2)
4

<5>extend():将其他列表的内容扩展到当前列表中(将后者内部所有的元素依次添加在当前列表中),不同于两个序列相加,两个序列相加,是直接创建新的序列对象的。

>>> l1 = [1,2,3,4]
>>> l2 = [5,6,7,8]
>>> l1.extend(l2)
>>> l1
[1, 2, 3, 4, 5, 6, 7, 8]
>>> l2
[5, 6, 7, 8]
>>> l1.extend("abc")
>>> l1
[1, 2, 3, 4, 5, 6, 7, 8, 'a', 'b', 'c']
>>> l1.extend(123)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

<6>index():从左到右返回元素的角标,如果不存在则抛出异常

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

<7>insert():在某个位置插入元素,角标如果越界,如果是负数,则为倒数第几个;如果角标大于列表长度,在末尾添加

>>> l
[1, 2, 3, 4]
>>> l.insert(2,5)
>>> l
[1, 2, 5, 3, 4]
>>> l.insert(10,6)
>>> l
[1, 2, 5, 3, 4, 6]
>>> l.insert(-2,7)
>>> l
[1, 2, 5, 3, 7, 4, 6]

<8>pop():在列表的尾部随机删除一个元素,删除最后加进去的元素

>>> l = [1,2,3,4]
>>> l.append(5)
>>> l
[1, 2, 3, 4, 5]
>>> l.pop()
5
>>> l
[1, 2, 3, 4]

<9>remove():删除从左到右第一个指定的元素

>>> l
[1, 2, 3, 4]
>>> l.remove(4)
>>> l
[1, 2, 3]
>>> l.remove(2)
>>> l
[1, 3]
>>> l = [1,1,1,2,2,3,3]
>>> l.remove(1)
>>> l
[1, 1, 2, 2, 3, 3]

<10>reverse():反转列表

>>> l.reverse()
>>> l
[3, 3, 2, 2, 1, 1]

<11>sort():排序

>>> l = [3,2,9,1,6,5,7,4,8]
>>> l.sort()
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l.reverse()
>>> l
[9, 8, 7, 6, 5, 4, 3, 2, 1]

二、set
它的特点是:无序、元素不能重复
1、如何定义set
<1> s = {元素1, 元素2…}
s = set()
s = set({元素1, 元素2…})
<2>s = set([元素1, 元素2…]) 将list转换为set对象
ls = list({元素1, 元素2…}) 将set转换为list对象
2、常见使用方法
<1> add():添加
<2>clear():清除
<3>copy():复制
<4>remove():通过元素本身移除,如果元素不存在,则抛出异常
<5>discard(): 通过元素本身移除,如果元素不存在,则什么都不做
<6>pop():随机移除元素
<7>intersection():交集
<8>union():并集
<9>difference():差集
<10>update():合并集合

>>> s1 = {1,2,3,4,5}
>>> s2 = {6,7,8,9,10}
>>> s1.add(0)   #添加
>>> s1
{0, 1, 2, 3, 4, 5}
>>> s = {1,2,3,5,7}
>>> s
{1, 2, 3, 5, 7}
>>> s.clear    #清除
<built-in method clear of set object at 0x000001CF34BAAD60>
>>> s
{1, 2, 3, 5, 7}
>>> s.clear()
>>> s
set()
>>> s3 = s2.copy()   #复制
>>> s3
{6, 7, 8, 9, 10}
>>> s3.remove(6)   #移除
>>> s3
{7, 8, 9, 10}
>>> s3.remove(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 2
>>> s3.discard(7)
>>> s3
{8, 9, 10}
>>> s3.discard(2)   # 移除
>>> s3
{8, 9, 10}
>>> s3.pop()   #随机删除
8
>>> s3
{9, 10}
>>> s1
{0, 1, 2, 3, 4, 5}
>>> s2
{6, 7, 8, 9, 10}
>>> s2.intersection(s3)   #交集
{9, 10}
>>> s1.union(s2)   #并集
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> s2.difference(s3)   #差集
{8, 6, 7}
>>> s1.update(s2)   #合并集合
>>> s1
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

三、tuple
元组是一种不可变序列,可以理解为不可变的列表。除了内部元素不能修改(增,删,改)之外,其他的和列表用法差不多。是用圆括号括起来的。

>>> t = ()
>>> type(t)
<class 'tuple'>
>>> t = (1)
>>> type(t)
<class 'int'>
>>> t = (1,)
>>> type(t)
<class 'tuple'>
>>> t = (1,2,3)
>>> type(t)
<class 'tuple'>
>>> t = 1,2,3,4,5
>>> type(t)
<class 'tuple'>
>>> t = "你好","世界","哈哈"
>>> type(t)
<class 'tuple'>
>>> l = [1,2,3,4,5]
>>> type(l)
<class 'list'>
>>> t = tuple(l)
>>> t
(1, 2, 3, 4, 5)
>>> t = tuple("abcde")
>>> t
('a', 'b', 'c', 'd', 'e')

1、与列表相同的操作
count()、index()、len()、max()、min()、tuple()、

>>> t = (1,2,3,4,5)
>>> max(t)   #最大值
5
>>> min(t)   #最小值
1
>>> len(t)   #长度
5
>>> t.count(5)    #统计某一元素出现的次数
1
>>> t.index(3)    #通过角标来查找元素
2
>>> t.sort()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'sort'    #“tuple”对象没有属性“find”
>>> t.find(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'find'

2、元组中不允许的操作
修改、新增元素。删除某个元素(但是可以删除整个元组)。所有会对元组内部元素发生修改动作的方法。

>>> t.append(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'   #“tuple”对象没有属性“append”
>>> t.remove(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'remove'
>>> t
(1, 2, 3, 4, 5)
>>> t[0] = 666
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> del t[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
>>> del t
>>> t
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 't' is not defined

*元组只保证它的一级子元素不可变,对于嵌套的元素内部,不保证不可变的说白了指的就是元组所存储的对象地址不可变。

>>> t = (1,2,[3,4])
>>> t[0] = 666
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t[2] = [5,6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t[2][0] = 5
>>> t[2][1] = 6
>>> t
(1, 2, [5, 6])
>>> id(t[2])
53493544
>>> t[2].append(7)
>>> t
(1, 2, [5, 6, 7])
>>> id(t[2])
53493544

所以,在使用元组时,尽量使用数字、字符串和元组这种不可变对象的数据类型作为元素。当数据一旦确定下来,不可更改时,则使用元组。
四、dict
字典本身是一组映射的集合,每一个数据项都由 键和值 组成的 键值对。字典都是由键值对组成的,所以我们可以根据键从而获取值。这里同集合set一样,不能通过角标获取元素。字典当中 键是不能重复的 值是可以重复的。所有键的组成一个集合,所有值组成一个序列。
1、创建字典
键和值之间用冒号:分割,每个键值对之间用逗号,分割,整个字典在{}中。

>>> s = {1,2,3}
>>> type(s)
<class 'set'>
>>> s = {}
>>> type(s)
<class 'dict'>
>>> s = set()
>>> s
set()
>>> dic = {}
>>> dic = {'Alice':20,'Beth':21,'Cecil':30}
>>> dic
{'Alice': 20, 'Beth': 21, 'Cecil': 30}
>>> dic = dict(hehe=20,haha=30,xixi=40)
>>> dic
{'hehe': 20, 'haha': 30, 'xixi': 40}
>>> dic = dict([('lala',2),('xixi',3),('hehe',4)])
>>> dic
{'lala': 2, 'xixi': 3, 'hehe': 4}

2、通过键来访问元素

>>> dic = {0:1,1:2,2:3}
>>> dic
{0: 1, 1: 2, 2: 3}
>>> dic(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict' object is not callable
>>> dic[0]
1

3、增加和修改
增加就是往字典中新增一条键值对,修改是将原先键所对应的值进行修改,由于key只能对应一个值,所以,多次对一个key赋值,其实就是在修改。如果key不存在,则为新增;如果存在,则为修改。

>>> dic
{'lala': 2, 'xixi': 3, 'hehe': 4}
>>> dic['lala'] = 666
>>> dic
{'lala': 666, 'xixi': 3, 'hehe': 4}
>>> dic['lala'] = 888
>>> dic
{'lala': 888, 'xixi': 3, 'hehe': 4}
>>> dic['kaka'] = 9
>>> dic
{'lala': 888, 'xixi': 3, 'hehe': 4, 'kaka': 9}
>>> dic['kaka'] = 10
>>> dic
{'lala': 888, 'xixi': 3, 'hehe': 4, 'kaka': 10}

4、删除操作

>>> del dic['xixi']
>>> dic
{'lala': 888, 'hehe': 4, 'kaka': 10}
>>> dic.pop('hehe')
4
>>> dic
{'lala': 888, 'kaka': 10}
>>> dic.clear()
>>> dic
{}

5、遍历字典
keys()、values()、items()

dic = {'lala': 1, 'xixi': 3, 'hehe': 4, 'kaka': 2}
# 1.直接遍历字典 获取键 根据键获取值
for key in dic:
    print(key, dic[key])
print("=" * 10)
# 2. 利用keys方法 获取键 根据键获取值
for key in dic.keys():
    print(key, dic[key])
print("=" * 10)
# 3. 利用values方法 获取值 但是无法获取键
for value in dic.values():
    print(value)
print("=" * 10)
# 4. 利用items方法 获取键值对-元组
for key,values in dic.items():
    print(key,values)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值