Python学习之---集合,元组,列表,字符串,字典 ---组合数据类型使用方法

本文详细介绍了Python的组合数据类型,包括集合的定义、操作函数和方法,列表的定义及操作,元组的特性与操作,字符串的定义和常用操作,以及字典的定义、初始化、访问、修改和遍历方法。强调了集合和字典在元素检索上的高效性,并对比了列表和元组的特点。最后,讨论了字典的特殊操作,如defaultdict和OrderedDict。
摘要由CSDN通过智能技术生成

0. 组合数据类型的基本概念

定义: 能够表示多个数据的类型称为组合数据类型。

在这里插入图片描述
组合数据类型分类: 集合类型;序列类型;映射类型。

集合类型: 是一个元素集合,元素之间无序,相同元素在集合中唯一存在。

序列类型: 是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他,可重复。序列类型的典型代表是字符串类型和列表类型。
映射类型是:“键-值”数据项的组合,每个元素是一个键值对,表示为(key, value)。映射类型的典型代表是字典类型。

0.1 集合类型操作函数或方法

函数或方法 描述
S.add(x) 如果数据项x不在集合S中,将x增加到s
S.remove(x) 如果x在集合S中,移除该元素;不在产生KeyError异常
S.clear() 移除S中所有数据项
len(S) 返回集合S元素个数
x in S 如果x是S的元素,返回True,否则返回False
x not in S 如果x不是S的元素,返回True,否则返回False

0.2 序列类型的操作符和函数

操作符 描述
x in s 如果x是s的元素,返回True,否则返回False
x not in s 如果x不是s的元素,返回True,否则返回False
s + t 连接s和t
s * n 或 n * s 将序列s复制n次
s[i] 索引,返回序列的第i个元素
s[i: j] 切片,返回包含序列s第i到j个元素的子序列(不包含第j个元素)
s[i: j: k] 步骤切片,返回包含序列s第i到j个元素以j为步数的子序列
len(s) 序列s的元素个数(长度)
min(s) 序列s中的最小元素
max(s) 序列s中的最大元素
s.index(x) 序列s中第一次出现元素x的位置
s.count(x) 序列s中出现x的总次数

1 集合

1.1 定义

Python语言中的集合类型与数学中的集合概念一致,即包含0个或多个数据项的无序组合。集合是无序组合,用大括号"{}"表示,它没有索引和位置的概念,集合中元素可以动态增加或删除。

集合(set)是可变,无序,不重复的元素的集合

1.2 集合的操作

  • 集合初始化定义:
s1 = set()  
s2 = {
   1,2,3}  
s5 = set(range(5))  
  • 集合类型有一些常用的操作函数或方法
函数或方法 描述
S.add(x) 如果数据项x不在集合S中,将x增加到s
S.remove(x)★ 如果x在集合S中,移除该元素;不存在则KeyError异常
S.discard(x)★ 存在x则移除,不存在则不报错,不改变原来的集合
S.clear() 移除S中所有数据项
len(S) 返回集合S元素个数
x in S 如果x是S的元素,返回True,否则返回False
x not in S 如果x不是S的元素,返回True,否则返回False
set.pop() 任意移除一个元素,并返回移除的元素.
  • 集合的操作符

集合类型有4个操作符,交集(&).并集(|).差集(-).补集(^),操作逻辑与数学定义相同。
集合操作符

操作符的运算 描述
S – T 返回一个新集合,包括在集合S中但不在集合T中的元素
S & T 返回一个新集合,包括同时在集合S和T中的元素
S ^ T 返回一个新集合,包括集合S和T中非共同元素
S | T 返回一个新集合,包括集合S和T中所有元素

1.3 集合成员运算符比较

线性结构的查询时间复杂度是O(n),即随着数据规模的增大而增大耗时.

set,dict 等结构,内部使用hash 值作为key,时间复杂度可以做到O(1),查询时间与数据规模无关.
示例:

n1 = 100
n2=1000000
l1= list(range(n1))
l2=list(range(n2))
s1= set(range(n1))
s2=set(range(n2))

%timeit (-1 in l1)  
>>>2.02 µs ± 53.9 ns 
%timeit (-1 in l2)  
>>>19.9 ms ± 293 µs 
%timeit (-1 in s1)  
>>>106 ns ± 2.06 ns 
%timeit (-1 in s2)  
>>>97.8 ns ± 0.964 ns 

由上可以看出,判断某个数是否在所列数据结构中,用集合检索的速度远远快于列表.其时间复杂度为O(1).
这里主要运用到了hash.第一步就是对元素进行hash,如果存在则hash值不变,如果不存在则可以进行hash,因此查找是否存在只需要操作一次便可完成,所以其速度非常快,故可以应用于元素的检索中.
以下都是不可变类型,是可哈希类型,hashable

int,float,complex  #数值型
True,False  #布尔型
string,bytes  #字符串
tuple  
None  

2. 列表类型

2.1 列表定义

列表是包含0个或多个元组组成的有序序列,属于序列类型。列表可以进行元素增加,删除,替换,查找等操作。列表没有长度限制,元素类型可以不同,不需要预定义长度。
列表类型用中括号"[]"表示,也可以通过list(x)函数将集合或字符串类型转换成列表类型。

2.1.1列表的操作函数

操作函数 描述
len(ls) 列表ls的元素个数(长度)
min(ls) 列表ls中的最小元素
max(ls) 列表ls中的最大元素
list(x) 将x转变成列表类型

2.1.2 列表操作方法

方法 描述
ls.append(x) 在列表ls最后增加一个元素x O(1)
ls.insert(i, x) 在列表ls第i位置增加元素x
ls.clear() 删除ls中所有元素
ls.pop(i) 将列表ls中第i项元素取出并删除该元素O(n)
ls.remove(x) 将列表中出现的第一个元素x删除O(n)
ls.reverse()★ 列表ls中元素反转
ls.copy() 生成一个新列表,复制ls中所有元素
ls.extend() 在原列表尾部连续追加多个元素
ls.index() 返回s中第一次出现元素x的位置O(1)
ls.sort() 对列表元素进行排序 当reverse =True 时反转降序
ls1 +ls2 生成一个新的列表,两个列表尾部相加(但重新分配内存,空间复杂度高)
  • 01特例ls.copy

    list1 = [1,[1,2,3],4]  
    list2 = list1.copy()  
    list[1][1] =5  
    lsit1 = list2 ?  
    

答案是相等。
列表拷贝为浅拷贝,只拷贝了地址,故后期修改地址内的数据被复制列表也会作相应的修改。
若想完整拷贝需要倒入库进行深拷贝:

import  copy :
list1 = list0.copy.deepcopy()

这个进行的拷贝就会完整复制所有数据。

同样:

list2 = [1,2,3]  
list3 = list2 *3

这种也是浅拷贝,修改一个数据,后面的数据同样更改。慎用!!!!

  • 02特例ls.sort()
ls1=[1,2,4,5,"3"]
ls1.sort()#会报错,但是使用     
ls1.sort(key=int) #可以将列表的类型改为相同格式,使排序成立。 
>>>ls1=[1,2,"3",4,5]#不修改列表中原格式

3.元组

3.1 定义:

元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。
元组类型一旦定义就不能修改,在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值