第六周 python组合数据类型
集合类型及操作
集合元素之间无序,集合元素不可更改。
创建
set("pypy123")
{'1', '3', 'p', 'y', '2'} 空集合不能用{}生成,留个字典了, 用set()
关系操作
交 & 并 | 差 - 补^ 支持(&=, |=, -=, ^=)
关系操作符 <,<=,>,>= 判断子集关系或包含关系
>>> A = {'p','y',123} >>> B = set("pypy123") >>> A-B {123} >>> B-A {'1', '3', '2'} >>> A&B {'y', 'p'} >>> A|B {'1', '3', 'p', 'y', '2', 123} >>> A^B {'1', '3', '2', 123} >>>
方法:
S.add(x)
S.discard(x) #不报错
S.remove(x) #没有会报错
S.clear()
S.pop() #随机 pop一个,没有产生异常
S.copy()
Len(S)
x in S / x not in S
集合应用场景:
关系判断
数据去重:集合类型所有数据无重复
>>> listA = [1,3,2,4,2,1,1,2] >>> setTemp = set(listA) >>> listA = list(setTemp) >>> listA [1, 2, 3, 4]
序列类型及操作
序列是一维元素的向量。
序列类型是基类类型 (元组,列表,字符串)由序列类型衍生
处理函数:
x in S / x not in S
S + t
S *n或n*S
S[i]
s[i:j]或s[i:j:k] #切片
通用函数:
len(s)
min(s) #需要可比
max(s) #需要可比
方法:
s.index(x)或 s.index(x,i,j) #从i到j第一次出现的位置
s.count(x) #x出现总次数
元组类型
元组是序列类型的一种扩展。
不可变类型
定义
()或 tuple()
单个元组 (1,) 要加逗号,区分与基本类型
可以使用小括号或者不适用小括号
example:
def func():
return 1,2
1,2就是一个元组
操作:
继承序列的操作
无特殊操作
列表类型
可变类型
定义
[]或list()
列表中各元素类型可以不同,无长度限制
ex:
>>> ls = ['pig','fish',999] >>> ls ['pig', 'fish', 999] >>> lt = ls >>> lt ['pig', 'fish', 999]
方括号[]和list真正创建一个列表,赋值操作仅传递引用()浅拷贝
操作:
ls[i] = x
ls[i:j:k] = lt #用lt替换ls切片后所对应元素子列表
del ls[i]
del ls[i:j:k]
ls += lt
ls *= n #使元素重复n遍
方法:
ls.append(x) #后面增加一个元素
ls.clear()
ls.copy() #创建一个新的,深拷贝
ls.insert(i, x) #在ls第i个元素前增加元素x
ls.pop(i) #取出并删除第i位置元素
ls.remove(x) #将ls中出现的第一个元素x删除
ls.reverse() #反转
extend()和append()的区别:
append(x)只向列表增加一个元素,如果x为列表,则列表x作为一个元素,不会拆分
extend(seq)参数seq 是元素序列,会将元素拆分依次加到后面
>>> ls = list(range(1,5)) >>> ls [1, 2, 3, 4] >>> ls.append(1) >>> ls [1, 2, 3, 4, 1] >>> ls.append(1,2,3) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: append() takes exactly one argument (3 given) >>> ls.append([1,2,3]) >>> ls [1, 2, 3, 4, 1, [1, 2, 3]] >>> ls.append((1,2,3)) >>> ls [1, 2, 3, 4, 1, [1, 2, 3], (1, 2, 3)] >>> ls.append({a:1,b:2}) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>> ls.append({'a':1,'b':2}) >>> ls [1, 2, 3, 4, 1, [1, 2, 3], (1, 2, 3), {'a': 1, 'b': 2}] >>> ls.extend(range(5,8)) >>> ls [1, 2, 3, 4, 1, [1, 2, 3], (1, 2, 3), {'a': 1, 'b': 2}, 5, 6, 7] >>> ls.extend((1,2,3)) >>> ls [1, 2, 3, 4, 1, [1, 2, 3], (1, 2, 3), {'a': 1, 'b': 2}, 5, 6, 7, 1, 2, 3] >>> ls.extend({'c':3,'d':4}) >>> ls [1, 2, 3, 4, 1, [1, 2, 3], (1, 2, 3), {'a': 1, 'b': 2}, 5, 6, 7, 1, 2, 3, 'c', 'd']
序列应用场景
数据表示
元组用于元素不改变的场景,多用于固定搭配,数据保护 (const)
字典类型
键值对 索引->数据
字典是键值对的集合,键值对之间无序
定义
{}或dict() 键值间用:分割
操作和方法:
del d[k]
k in d
d.keys() #返回所有键 返回类型可以便利,但不能当列表操作
d.values() #返回所有值
d.items() #返回所有键值对信息
d.get(k,<default>) #键k存在,返回对应值,不存在返回<default>值
d.pop(k,<default>) #键k存在,取出对应值,不存在返回<default>值
d.popitem() #随机取出一个键值对,以元组的形式反回
d.clear()
len(d)
应用场景
表达键值对数据,进而操作
元素遍历
for k in d: