2021-04-25

1. 元组

元组基本介绍

  • 元组表现形式tuple
  • 元组是⼀个不可变序列(⼀般当我们希望数据不改变时,我们使⽤元组,其他情况下基本都⽤列表)
  • 使⽤()创建元素
  • 元组不是空元组⾄少有⼀个 逗号(,) 当元组不是空元组时括号可以省略
  • 元组解包指将元组当中的每⼀个元素都赋值给⼀个变量
    元组 tuple ()
    tuple1 = () # 空元组
    当你创建元组的时候,可以省略括号
    如果你创建的不是一个空元祖,那么元组里面必须要有一个逗号
tuple1 = (10,)  #这样才是元组
print(type(tuple1))

数据的拆包,只要是一个序列,就可以进行拆包
元组的拆包

tuple1 = (1, 2, 3, 4)
a, *b, c = tuple1  # *是一个通配符
print(a)
print(b)
print(c)

字符串的拆包

s = 'abcdef'
a, *b, c = s # *代表其他全部
print(a)
print(b)
print(c)

列表的拆包

list1 = [1, 2, 3, 4, 5]
a, *b, c = list1  #这里的*和字符串的一样
print(a)
print(b)
print(c)

2.字典

2.1 字典的基本介绍

  • 字典属于⼀种新的数据结构称为映射(mapping)
  • 字典的作⽤和列表类似,都是⽤来存储对象的容器
  • 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
  • 在字典中每⼀个元素都有唯⼀的名字,通过这个唯⼀的名字可以找到指定的元素
  • 这个唯⼀的名字我们称之为key 通过key可以快速查询value 也可以称之为值
  • 字典我们也称之为键值对(key-value)结构
  • 每个字典中都可以有多个键值对,⽽每⼀个键值对我们称其为⼀项(item)
  • 创建⼀个有数据的字典 语法 {key:value}
  • 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str booltuple…)
  • 字典的键是不能重复的,如果出现重复的后⾯的会替换前⾯的

一一对应的关系就叫做映射 mapping key-value 一个键值对 称呼为一项
字典的创建 dict {}
dict1 = {} # 创建空字典
字典写法 dict1 = {key: value值}
双值子序列 双值(1, 2) 子序列[(1,2)] 双值子序列[(1, 2), (3, 4)]
当字典中的key有重复的时候,后面的key-value会将前面的所替代

dict1 = {'name': '杨过',
 'age': 18, 
 'gender': '男', 
 'name': '小龙女'  #上面的杨过会变成小龙女
 }

找value值要用key找

2.2遍历字典

遍历字典有3中方法
keys()

dict1 = {
    'name': '杨过',
    'age': 18,
    'gender': '男',
    'skill': '黯然销魂掌',
}

# keys()
for k in dict1.keys():
    print(dict1[k]) #打印出来就是values值

values()

dict1 = {
    'name': '杨过',
    'age': 18,
    'gender': '男',
    'skill': '黯然销魂掌',
}
# values()
for v in dict1.values():
    print(v) # 打印出来就是values值

items()

dict1 = {
    'name': '杨过',
    'age': 18,
    'gender': '男',
    'skill': '黯然销魂掌',
}
# items()
for k, v in dict1.items():
    print(k, '=', v) #打印出来就是key=values值

2.3 字典的增删改查

2.3.1 通过key来获取value

print(dict[key])

2.3.2 获取的方法

get方法
dict.get(key)

2.3.3 修改字典

dict[key] = value
这个情况是由当前这个key存在的时候,会直接替换
当不存在这个key的时候,则是直接向字典中插入这个key-value

2.3.4 添加方法

  • dict.setdefault(key) 向字典中添加key-value
    当key存在的时候,不会对字典做任何修改,而是会返回这个value值
    当key不存在时,则直接插入这条数据,并返回当前的这个value
  • dict.update() 将其他字典中的数据添加到这个字典当中来
    当前这个key存在的时候,也会直接替换
  • 删除方法
    del 关键字删除
    dict.popitem() 不需要传递参数,会默认删除最后一个键值对
    res = dict.popitem() # 返回值是删除的内容
    dict.pop(key, [default])
    res = dict.pop(key, 设置的默认值) # 当不存在这个key的时候,会返回你设置的默认值
    clear()# 清空字典

3.深拷贝和浅拷贝

copy() 浅拷贝
不可变类型数据的性质:值改变id就改变,值不改变,id就不会变

a = 'abcd'
b = 'abcd'
print(id(a), id(b)) # id是一样的,因为是字符串,而且值一样

可变类型 : 变得是id

c = [1, 2, 3] 
# d = c # 除非加等号
d = [1, 2, 3]
print(id(c), id(d)) #这样id是不一样的

import copy

3.1 浅拷贝

只能拷贝第一层的数据,不能拷贝第二层乃至更多层的数据独立出来
不能拷贝深层的value值,如列表里面的值
dict2 = copy.copy(dict1)
copy() ⽅法⽤来对字典进⾏浅复制
注意:潜复制只会复制字典本身,如果字典中还有个字典是不会进⾏复制的

dict1 = {'name': 123, 'data': [1, 2, 3]}
dict2 = copy.copy(dict1)
dict1['name'] = 456  #这个就会改变
dict1['data'][1] = 456 #这个dict的2也会变

3.2深拷贝

:能够将所有层次的数据都拷贝出来,重新独立一份
dict2 =copy.deepcopy(dict1)

4.集合的简介

  • 集合表现形式set 集合和列表⾮常相似
  • 不同点
    • 集合只能存储不可变对象
    • 集合中存储的对象是⽆序的
    • 集合不能出现重复元素
  • 使⽤{}来创建集合
  • 可以通过set()来将序列和字典转换成集合
  • len() 使⽤len()来获取集合中元素的数量
  • add()像集合中添加元素
  • update()将⼀个集合中的元素添加到另⼀个集合当中
  • pop()随机删除集合中的⼀个元素⼀般是删除最后⼀个元素
  • remove() 删除集合中指定的元素
  • clear() 清空集合

4.1集合的创建

  • 集合用{}
    set1 = {} # 这样只能创建空字典,不能创建空集合
  • 空集合的创建
    set1 = set()
  • 集合只能存储不可变对象
    不能存储列表,字典等
  • 集合中存储的对象是无序的 , 他是没有索引的
  • 集合不能出现重复元素, 根据这个特性,我们可以用集合来去重

4.2 集合的使用

  • 添加元素
    set.add(元素)
    set.update(集合)
  • 删除方法
    没有del方法,因为没有索引
    set.pop() 一般删除最后一个
    set.remove() 指定元素进行删除
    set.clear() 清空

4.3 集合的运算

& 交集运算
| 并集运算
- 差集运算
^ 亦或集 #找没有相同的
<= 检查⼀个集合是否是另⼀个集合的⼦集
< 检查⼀个集合是否是另⼀个集合的真⼦集
>=检查⼀个集合是否是另⼀个集合的超集
>检查⼀个集合是否是另⼀个集合的真超集

5.作业

5.1 a = {“name”:“123”,“data”:{“result”:[{“src”:“python1”},{“src”:“python2”},{“src”:“python3”}]}} 找到python1/python2/python3

a = {"name":"123",
     "data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}
     }
# 找到python1/python2/python3
q = a["data"]["result"][0]["src"]
w = a["data"]["result"][1]["src"]
e = a["data"]["result"][2]["src"]

print(q)
print(w)
print(e)

有如下值列表[11,22,33,44,55,66,77,88,99,90], 将所有⼤于66的值保存⾄字典的第⼀个key的值中,将⼩于66值保存⾄第⼆个key的值中。

a = [11,22,33,44,55,66,77,88,99,90]
list1 = []
list2 = []
dict = {}
for i in a:
     if i > 66:
          list1.append(i)
     elif i < 66:
          list2.append(i)
dict['key1'] = list1
dict['key2'] = list2
print(dict)
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值