元组
元组的特点:
-
有序性:组中的元素保持其原始顺序,不会发生改变。
-
不可变性:元组的元素是不可修改、删除或添加的。
常用方法:
-
len()
-
count()
-
index()
列表
列表的特点
-
有序性
-
可变性
-
可存储不同类型的元素
列表的构造方法
` l1 = list("abc")`
列表操作
1.列表中元素的引用
l = [1,2,3,4,5]
print(l[0])
2.列表中元素的修改
l = [1,2,3,4,5]
l[0] = 111
3.列表的切片操作
l = [1,2,3,4,5]
print(l[0:3])
4.统计查找操作
l = [1,2,3,4,5,1,2,3,3]
count(value)
在列表中统计参数 value 出现的次数
print(l.count(3))
index(value, start, stop)
在列表中查找参数 value 第一次出现的下标位置,如果给定范围则只在范围内查找,如果查找目标不存在则抛出错误。
l = [1,2,3,4,5,1,2,3,3]
print(l.index(3))
print(l.index(3,5,10))
5.增加元素
append(value)
向列表最后追加元素
extend(iterable)
将一个可迭代对象的元素依次添加到列表最后
extend(iterable)
将一个可迭代对象的元素依次添加到列表最后
l.insert(0, "A")
print(l)
6.删除元素
del 可以使用 del 关键字结合索引来删除指定位置的元素。如果指定的下标不存在则抛出一个错误。
l = [1,2,3,4,5,1,2,3]
del l[0]
print(l)
del l[10]
remove(value)
在列表中删除第一个指定的数据,如果删除的数据不存在则抛出错误
l = [1,2,3,4,5,1,2,3]
l.remove(3)
print(l)
l.remove(33)
pop(index)
从列表中取出并删除指定下标位置的元素,默认取出并删除最后一个元素,如果指定下标不存在,则会抛出一个错误。
l = [1,2,3,4,5,1,2,3]
print(l.pop())
print(l)
clear()
清空列表
7.列表排序
sort(key, reverse)
对列表进行排序
- sort方法默认对基本数据类型进行升序排序
- reverse参数将列表元素排序后将列表逆序,实现降序排序
- key 参数用来指定排序规则,比如使用学生的年龄进行排序(此处不讲解该参数的使用,在lambda处讲解)
l = ["a","abc","ab","A"]
l.sort()
print(l)
l = ["a","abc","ab","A"]
l.sort(reverse=True)
print(l)
元组和列表的区别
相同点:1.都是有序的,可迭代的数据结构。2.都可以存放不同数据类型的元素
不同点:1.元组是不可变的,不可以进行增删改操作,列表是可变的,可以进行增删改操作。2.实现机制不同,相同元素和个数的情况下,元组占用的内存空间更小
from sys import getsizeof
t = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(getsizeof(t))
print(getsizeof(l))
字典
字典的创建
d1 = {}
d2 = {"name": "Alice", "age": 25, "gender": "female"}
构造字典:
d1 = dict(one=1, two=2, three=3)
d2 = dict([('two', 2), ('one', 1), ('three', 3)])
d3 = dict((('two', 2), ('one', 1), ('three', 3)))
字典操作
stu = {"name":"Tom", "age": 23, "gender":"male"}
1.字典数据访问
print(stu["age"])
2.字典元素添加与修改
格式: 字典对象[key] = value
# 添加新元素
stu["address"] = "BeiJing"
print(stu)
# 修改数据
stu["name"] = "Jack"
stu["address"] = "ShangHai"
print(stu)
3.字典元素的删除
# 删除元素
del stu['age']
print(stu)
del stu['address']
print(stu)
4.字典数据获取
stu = {'name': 'Tom', 'age': 23, 'gender': 'male', 'address': 'BeiJing'}
keys()
用来获取字典中所有的 key,保存到一个列表中
ks = stu.keys()
values()
用来获取字典中所有的value, 保存到一个列表中,并以 dict_values
类型返回
ks = stu.values()
items()
用来获取字典中所有的键值对,每一个元素键值对都以一个元组保存,将所有元素元组保存到一个列表中,并以 dict_items
类型返回
ks = stu.items()
print(ks)
get(key, default)
用来获取key对应的值,如果指定的key不存在,则返回默认值。
print(stu.get("name"))
print(stu.get("hobby"))
5.字典添加更新
stu = {‘name’: ‘Tom’, ‘age’: 23, ‘gender’: ‘male’, ‘address’: ‘BeiJing’}
setdefault(key,default)
给一个不存在的key添加一个默认值并将该键值对保存到字典中
stu.setdefault("hobby1")
print(stu)
stu.setdefault("hobby2", "无")
print(stu)
fromkeys(keys,val)
用于创建一个新字典,以序列 keys 中元素做字典的键,value 为字典所有键对应的初始值,默认为None
。
ks = ("name", "age", "gender")
s1 = dict.fromkeys(ks)
print(s1)
s2 = dict.fromkeys(ks,"无")
print(s2)
update(d/iterable)
使用参数中的数据更新当前字典。
6.字典删除类
popitem()
用来获取并删除字典中的最后一个键值对,返回一个元组,如果字典为空时,则抛出一个错误
stu = {'name': 'Tom', 'age': 23, 'gender': 'male', 'address': 'BeiJing'}
v = stu.popitem()
print(v)
print(stu)
pop(key)
用于获取并删除字典中指定key对应的键值对。如果指定的key不存在,则抛出错误
clear()
清空字典中所有的键值对元素
集合
集合的创建
- 不能使用
{}
创建一个空集合,因为此种方式创建的类型为字典。
# 不能使用花括号 {} 来定义一个空集合
s1 = set()
s2 = {}
print(type(s1))
print(type(s2))
# 使用花括号 {},在内部添加元素,用逗号 , 分隔
my_set = {1, 2, 3, 4, 5}
# 使用内置函数 set() 创建集合
my_set = set([1, 2, 3, 4, 5])
# 集合元素具有唯一性
s = {1,1,1,2,3,4,5,6,6,6,6,6,6,6}
print(s)
执行结果:
<class 'set'>
<class 'dict'>
{1, 2, 3, 4, 5, 6}
集合操作
1.添加操作
-
add(ele)
向集合中添加一个元素,如果元素已存在则不产生任何影响 -
update(others)
更新集合,添加来自 others 中的所有元素,others是一个可迭代对象,如果数据在集合中存在则不更新。
s = {1, 2, 3}
s.update((4,5,6))
print(s)
s.update([5,6,7])
print(s)
s.update({6,7,8,9})
print(s)
执行结果:
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
2.删除操作
s = {1, 2, 3}
-
pop()
从集合中移除并返回任意一个元素,如果集合为空,则抛出错误s.pop() -
remove(elem)
从集合中移除元素 elem。 如果 elem 不存在于集合中则抛出错误。
s.remove(1) -
discard(elem)
如果元素 elem 存在于集合中则将其移除,如果elem不存在,则什么也不做 -
clear()
清空集合s.clear()
3.集合操作
判断两个集合是否不相交
-
isdisjoint(other)
如果集合中没有与 other 共有的元素则返回 True。 当且仅当两个集合的交集为空集合时,两者为不相交集合。
s = {1, 2, 3}
print(s.isdisjoint({4, 5, 6}))
print(s.isdisjoint({3, 4, 5}))
判断集合是否是另一个集合的子集
-
issubset(other)
检测是否集合中的每个元素都在 other 之中。
s = {1, 2, 3}
# 判断 s 是否为 other参数的子集
print(s.issubset({1, 2, 3}))
print(s.issubset({1, 2, 3, 4}))
print(s.issubset({3, 4, 5}))
print("*" * 10)
# 也可以通过运算符 <= 直接判断
print(s <= {1, 2, 3})
print(s <= {1, 2, 3, 4})
print(s <= {3, 4, 5})
print("*" * 10)
# 判断是否为真子集
print(s < {1, 2, 3})
print(s < {1, 2, 3, 4})
print(s < {3, 4, 5})
执行结果:
True
True
False
**********
True
True
False
**********
False
True
False
判断集合是否是另一个集合的超集
-
issuperset(other)
检测是否 other 中的每个元素都在集合之中。
s = {1, 2, 3, 4}
# 判断 s 是否为 other参数的超集
print(s.issuperset({1, 2, 3}))
print(s.issuperset({1, 2, 3, 4}))
print(s.issuperset({3, 4, 5}))
print("*" * 10)
# 也可以通过运算符 >= 直接判断
print(s >= {1, 2, 3})
print(s >= {1, 2, 3, 4})
print(s >= {3, 4, 5})
print("*" * 10)
# 判断是否为真超集
print(s > {1, 2, 3})
print(s > {1, 2, 3, 4})
print(s > {3, 4, 5})
执行结果:
True
True
False
**********
True
True
False
**********
True
False
False
并集
-
union(*other)
返回一个新集合,其中包含来自原集合以及 others 指定的所有集合中的元素,other可以指定多个集合
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
s3 = {5, 6, 7, 8}
print(s1.union(s2))
print(s1.union(s2,s3))
# 也可以使用 | 进行集合并集运算
print(s1 | s2)
print(s1 | s2 | s3)
执行结果:
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8}
交集
-
intersection(*others)
返回一个新集合,其中包含原集合以及 others 指定的所有集合中共有的元素。
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
s3 = {5, 6, 7, 8}
print(s1.intersection(s2))
print(s1.intersection(s2, s3))
print(s1.intersection(s3))
print("*" * 10)
# 也可以使用 & 进行集合交集运算
print(s1 & s2)
print(s1 & s2 & s3)
print(s1 & s3)
执行结果:
{3, 4}
set()
set()
**********
{3, 4}
set()
set()
差集
-
difference(*others)
返回一个新集合,包含原集合中在 others 指定的其他集合中不存在的元素。
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
s3 = {5, 6, 7, 8}
print(s1.difference(s2))
print(s1.difference(s2, s3))
print(s1.difference(s3))
print("*" * 10)
# 也可以使用 - 进行集合差集运算
print(s1 - s2)
print(s1 - s2 - s3)
print(s1 - s3)
执行结果:
{1, 2}
{1, 2}
{1, 2, 3, 4}
**********
{1, 2}
{1, 2}
{1, 2, 3, 4}
set()
set()
对称差集
-
symmetric_difference(other)
返回一个新集合,其中的元素或属于原集合或属于 other 指定的其他集合,但不能同时属于两者。
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
s3 = {5, 6, 7, 8}
print(s1.symmetric_difference(s2))
print(s1.symmetric_difference(s3))
print("*" * 10)
# 也可以使用 ^ 进行集合对称差集运算
print(s1 ^ s2)
print(s1 ^ s3)
执行结果:
{1, 2, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8}
**********
{1, 2, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8}