day8-python元组、字典和集合

今天是第八天,给大家分享一下python中的:

元组,字典和集合

一、元组

1.什么是元组(tuple)

元组就是不可变的列表
元组也是容器型数据类型, 将()作为容器的标志,多个元素之间用逗号隔开:(元素1, 元素2, 元素3, 元素4,...)
元组不可变(不支持增删改);元组是有序的(支持下标操作)
元组中的元素的要求和列表一样

1)空元组: ()
tuple1 = ()
print(type(tuple1))
2)单个元素的元组: (元素)
list1 = [10]    # 单个元素的列表
tuple2 = (10)
print(tuple2, type(tuple2))    # 10 

tuple3 = (10,)
print(tuple3, type(tuple3))    # (10,) 
3)多个元素的元组:

a. 变量 = (元素1, 元素2, 元素3,...)

tuple4 = (100, 200, 300)
print(tuple4, type(tuple4))    # (100, 200, 300) 

b. 变量 = 元素1, 元素2, 元素3, ...

tuple5 = 10, 20, 30, 40
print(tuple5, type(tuple5))    # (10, 20, 30, 40) 

2. 获取元组中的元素

1)列表获取元素的方式元组都支持

a.获取单个元素

names = '生活大爆炸', '权利的游戏', '吸血鬼日记', '破产姐妹', '兄弟连', '尼基塔'
print(names[-2])

b.切片

print(names[1::2])    # ('权利的游戏', '破产姐妹', '尼基塔')

c.遍历

for x in names:
    print(x)

print('=========================')
for index in range(len(names)):
    print(names[index])
2) 其他方式(同样适用于列表)

a. 变量1, 变量2, 变量3, ... = 元组
==注意: 在这儿变量的个数要和元组中元素的个数保持一致==

tuple6 = (10, 78, 45)
x, y, z = tuple6
print(x, y, z)    # 10 78 45

num1, num2 = 100, 200     # num1, num2 = (100, 200)

b.变量1, 变量2, 变量3, ... = 元组
前面的变量的个数小于元组中元组的个数,并且有且只有一个变量前有*

person = ('余婷', '女', 18, 100, 89, 50)
name, gender, age, *num = person
print(name, gender, age)   # 余婷 女 18
print(num)     # [100, 89, 50]


*x, y, z = 10, 90, 89, 78, 89
print(y, z)     # 78 89
print(x)       # [10, 90, 89]

a, b, *c, d, e = 1, 2, 3, 4, 5, 6, 7, 8, 9
print(a, b)    # 1 2
print(d, e)    # 8 9
print(c)       # [3, 4, 5, 6, 7]
补充:*的解包功能
list1 = [10, 20, 30]
print(*list1)    # 10 20 30   print(10, 20, 30)

3.列表相关操作全部适用于元素

二、字典

定义一个变量保存一个学生的信息:

stu = ['张三', 30, '男', '10011', 170, 65, 60]
print(stu[1])
print(stu[-1])

stu = {'name': '张三', 'age': 30, 'gender': '男', 'id': '10011', 'height': 170, 'weight': 65, 'score': 60}
print(stu['name'])
print(stu['height'])

0.什么时候使用字典

a.需要同时保存多个数据
b.多个数据的意义不同(需要做区分)

1.什么字典(dict)

字典是容器型数据类型,将{}作为容器的标志,多个元素用逗号隔开(字典的元素都是键值对): {键1:值1, 键2:值2, 键3:值3,...}
字典是可变的(支持增删改);字典是无序(不支持下标操作)

字典中元素: 键值对
键 - 不可变; 唯一 (一般是字符串)
值 - 任何类型的数据,可以重复
字典在保存数据的时候,真正想要保存的是值,键是用来对值进行区分和说明

空字典

dict1 = {}

dict2 = {2: 23, 'abc': 'hello', (1, 2): 200}
print(dict2)

字典的key不可变

# dict3 = {[1, 2]: 100, 'abc': 200}     # 报错
# print(dict3)

dict3 = {'a': 10, 'b': 20, 'a': 100}
print(dict3)    # {'a': 100, 'b': 20}

print({'a': 'b', 'c': 'd'} == {'c': 'd', 'a': 'b'})    # True

2. 获取字典的值

1) 获取单个元素对应的值
a. 字典[key]  -  获取字典中指定 key 对应的值(如果key不存在会报错)

dog = {'name': '财财', 'age': 3, 'breed': '土狗', 'gender': '母', 'weight': 10}
print(dog['name'])
print(dog['gender'])
# print(dog['height'])      # KeyError: 'height'

b.
字典.get(key) - 获取字典中指定 key 对应的值(如果key不存在不会报错,返回 None)
字典.get(key, 默认值) - 获取字典中指定 key 对应的值(如果key不存在,返回 默认值)

print(dog.get('breed'))
print(dog.get('height'))     # None

print(dog.get('age', 0))     # 3
print(dog.get('height', 40))     # 40
2)遍历

a. 需要掌握和适用的遍历方法(效率最高)
for 变量 in 字典:
循环体

注意: 变量取到的是字典中所有的key

dog = {'name': '财财', 'age': 3, 'breed': '土狗', 'gender': '母', 'weight': 10}
for x in dog:
    print(x, dog[x])

b. 其他两种情况1(知道)
for 变量 in 字典.values():
循环体

变量取到的是字典所有的值

for x in dog.values():
    print(x)

c. 其他两种情况2(知道)
for 变量1, 变量2 in 字典.items():
循环体

变量1能取到字典所有的key,变量2取到的是字典所有的值

for x, y in dog.items():
    print(x, y)

print(dog.items())

3.字典的增删改

增/改
语法1:
字典[key] = 值

如果 key 存在, 就将 key 对应的值修改成指定的值 (改)
如果 key 不存在,以 'key:值'的形式添加一个键值对(增)

语法2:
字典.setdefault(键, 值)  -  添加键值对(不存在修改功能)

movie = {'name': '西游记', 'time': '1978-10-23', 'director': '吴承恩'}
print(movie)
movie['time'] = '1989-10-25'
print(movie)

# 增
movie['score'] = 9.0
print(movie)

# 不会修改
movie.setdefault('score', 8.0)
print(movie)    # 'score': 9.0

# 可以增加
movie.setdefault('type', '神话')
print(movie)
1)del
del 字典[key]   -  删除指定key对应的键值对(key不存在会报错)
"""
movie = {'name': '西游记', 'time': '1989-10-25', 'director': '吴承恩', 'score': 9.0, 'type': '神话'}
del movie['director']
print(movie)


2)pop
字典.pop(key)   -  取出字典中指定key对应的值,并且返回被取出的值

value = movie.pop('type')
print(movie, value)

字典的相关操作

字典不支持加法和乘法运算

1)比较运算

字典只支持比较相等,不支持比较大小

print({'a': 1, 'b': 2} == {'b': 2, 'a': 1})   # True
2)in 和 not in

数据 in 字典 - 判断字典中是否存在指定的key
数据 not in 字典 - 判断字典中是否不存在指定的key

cat = {'name': '花花', 'age': 2, 'color': '白色'}
print('name' in cat)      # True
print('花花' in cat)       # False
3)相关函数

a. len(字典) - 统计字典中键值对的个数

print(len(cat))     # 3

b. dict(数据) - 将自定的数据转换成字典

数据的要求:1.是容器型数据类型 2.数据中元素是有且只有两个元素的容器(小容器) 3.小容器中的第一个元素是不可变的

x = [(1, 2), (3, 4), [5, 6]]
dict1 = dict(x)
print(dict1)    # {1: 2, 3: 4, 5: 6}

x = ('ab', 'cd', 'xy', ['name', '张三'])
dict2 = dict(x)
print(dict2)    # {'a': 'b', 'c': 'd', 'x': 'y', 'name': '张三'}

c.字典装换成其他的数据类型
bool(字典) - 空字典会转换成 False, 其他都是 True
list(字典) - 将字典所有的key作为列表的元素
tuple(字典) - 将字典所有的key作为元组的元素

cat = {'name': '花花', 'age': 2, 'color': '白色'}
print(list(cat))     # ['name', 'age', 'color']

2.相关方法

1) 字典.clear() - 清空字典
cat.clear()
print(cat)     # {}
2) 字典.copy() - 复制字典产生一个新的字典并且返回
cat = {'name': '花花', 'age': 2, 'color': '白色'}
cat1 = cat
cat1['name'] = '咪咪'
print(cat)     # {'name': '咪咪', 'age': 2, 'color': '白色'}

cat = {'name': '花花', 'age': 2, 'color': '白色'}
cat2 = cat.copy()
cat2['name'] = '咪咪'
print(cat)    # {'name': '花花', 'age': 2, 'color': '白色'}
3)dict.fromkeys()

dict.fromkeys(序列) - 创建一个新的字典,字典的key是序列中的元素,值是 None
dict.fromkeys(序列, 值) - 创建一个新的字典,字典的key是序列中的元素,值是指定的值

dict3 = dict.fromkeys('abc')
print(dict3)    # {'a': None, 'b': None, 'c': None}

stu = dict.fromkeys(['name', 'age', 'gender', 'tel', 'address', 'score'])
print(stu)   # {'name': None, 'age': None, 'gender': None, 'tel': None, 'address': None, 'score': None}

message = ['张三', '李四', '王五']
for name in message:
    new_stu = stu.copy()
    new_stu['name'] = name
    print(new_stu)

stu2 = dict.fromkeys(['name', 'age', 'gender', 'tel', 'address', 'score'], 0)
print(stu2)   # {'name': 0, 'age': 0, 'gender': 0, 'tel': 0, 'address': 0, 'score': 0}
4) items, keys, values

字典.keys() - 获取字典所有的key, 返回一个容器(这个容器不是列表)
字典.values() - 获取字典所有的值,返回一个容器(这个容器不是列表)
字典.items() - 获取字典所有的key和值,返回一个容器,容器中的元素是元组,每个元组对应一个键值对 (这个容器不是列表)

cat = {'name': '花花', 'age': 2, 'color': '白色'}
print(cat.keys())    # dict_keys(['name', 'age', 'color'])
print(cat.values())  # dict_values(['花花', 2, '白色'])
print(cat.items())   # dict_items([('name', '花花'), ('age', 2), ('color', '白色')])
5) update

字典.update(序列) - 用序列生产的字典去更新原字典(更新方式: 不存在就添加,存在就修改)

dict4 = {'a': 10, 'b': 20, 'c': 30}
dict4.update({'a': 100, 'd': 40})
print(dict4)   # {'a': 100, 'b': 20, 'c': 30, 'd': 40}

三、集合

1.什么是集合(set)

集合是容器型数据类型,将{}作为容器的标志,里面多个元素用逗号隔开: {元素1, 元素2, 元素3, ...}
集合是可变的(支持增删改); 集合是无序的

集合中元素是不可变并且唯一的

空集合
empty = set()    # {}是空字典
非空集合
set1 = {1, 23, 34}

set2 = {(1, 2), 3, 4}

# set3 = {[1, 2], 3, 4}    # 列表不能作为集合的元素

set4 = {1, 2, 3, 1, 4, 1}
print(set4)    # {1, 2, 3, 4}

print({1, 2, 3} == {2, 3, 1})   # True (说明集合无序)

2.集合中元素的增删改查

1) 查

集合没有办法直接获取单个元素,只能遍历

for 变量 in 集合:
循环体

变量取到的就是集合中的每个元素

nums = {23, 34, 90, 89}
for x in nums:
    print(x)
2)增

a. 集合.add(元素) - 在集合中添加指定元素
b. 集合.update(序列) - 将序列中的元素全部添加到集合

nums.add(100)
print(nums)   # {34, 100, 23, 89, 90}

nums.update('abc')
print(nums)   # {34, 100, 'c', 'b', 23, 89, 90, 'a'}

nums = set()
nums.update({'a': 10, 'b': 20})
print(nums)    # {'a', 'b'}
3) 删

集合.remove(元素) - 删除集合中指定的元素(元素不存在会报错)
集合.discard(元素) - 删除集合中指定的元素(元素不存在不会报错)

nums = {10, 89, 76, 90, 34}
# nums.remove(10)
nums.discard(10)
print(nums)

# nums.remove(100)  # 报错
nums.discard(100)   # 不报错
4)改 - 集合无法修改元素

3.数学集合运算

python中的集合支持数学集合运算:&(求交集)、|(求并集)、-(求差集)、对称差集(^)、>/<(判断是否是真子集)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8, 9}
1) 交集: 求两个集合的公共部分
print(set1 & set2)    # {4, 5}
2) 并集:两个集合合并成一个集合
print(set1 | set2)    # {1, 2, 3, 4, 5, 6, 7, 8, 9}
3) 差集:集合1 - 集合2 集合1中除了集合2剩余的部分
print(set1 - set2)   # {1, 2, 3}
print(set2 - set1)   # {8, 9, 6, 7}
4)对称差集:去掉两个集合公共的部分剩下的部分
print(set1 ^ set2)   # {1, 2, 3, 6, 7, 8, 9}
5)真子集
# 集合1 > 集合2    -   判断集合2是否是集合1的真子集
# 集合1 < 集合2    -   判断集合1是否是集合2的真子集
print({100, 200, 300, 400} > {10, 20})   # False
print({1, 10, 20} > {10, 20})    # True
print({10, 20} > {10, 20})       # False

好了,今天就到这里。再见~
image

你可能感兴趣的:(day8-python元组、字典和集合)