20201128_第七讲

1.元组简介
 1.1.元组表现形式tuple
 1.2.元组是一个不可变序列(一般当我们希望数据不改变时,我们使用元组,其他情况下基本都用列表)
 1.3.使用()创建元素
 1.4.元组不是空元组至少有一个 逗号(,) 当元组不是空元组时括号可以省略
 元组解包指将元组当中的每一个元素都赋值给一个变量

#tuple()
# my_tuple = (1,2,3,4)
# print(my_tuple,type(my_tuple))
# print(my_tuple[2])  #索引

#如果元组不是空元组,那么它至少得有一个都好
# tuple1 = (10,)    #加了逗号就是元组
# print(tuple1,type(tuple1))

#len()
#max()  min()
#in     not in
#count()
#index()

#元组的拆包
# a,b,c,d= my_tuple
# print(a,b,c,d)  #将元组中的内容拆分出来
# *a,b,c= my_tuple
# print(a,b,c)  #将元组中的内容拆分出来 [1, 2] 3 4
#在对一个元组拆包的时候,变量的数量和元组中元素的数量要保持一直。
#如果变量和元素不一致,就可以在变量前面加上一个*,这样会获取元组中剩余的元素,以列表的形式返回

#字符串拆包
# s = 'abcdef'
# a,b,*c = s
# print(a,b,c)

#列表拆包
# list1 = [1,2,3,4]
# a,b,*c = list1
# print(a,b,c)

#元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组
my_tuple = (1,2,3,4)
print(my_tuple)
del my_tuple

#元组之间可以使用+号和*号进行运算。意味着可以组合和复制,运算后会生成一个新的元组
# print((1,2,3) + (4,5,6))  #连接
# print(('Hi!',)*4)     #复制

#将可迭代系列转换为元组
# list1 = ['Google', 'Taobao', 'Runoob', 'Baidu']
# tuple1 = tuple(list1)
# print(tuple1)

2.字典
 2.1.字典的基本介绍
  2.1.1.字典属于一种新的数据结构称为映射(mapping)
  2.1.2.字典的作用和列表类似,都是用来存储对象的容器
  2.1.3.列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
  2.1.4.在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素
  2.1.5.这个唯一的名字我们称之为key 通过key可以快速查询value 也可以称之为值
  2.1.6.字典我们也称之为键值对(key-value)结构
  2.1.7.每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
  2.1.8.创建一个有数据的字典 语法 {key:value}
  2.1.9.字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple…)
  2.1.10.字典的键是不能重复的,如果出现重复的后面的会替换前面的
 2.2.字典的使用
  2.2.1.dict()函数来创建字典
  2.2.2.get(key[,default]) 根据键来获取字典的值。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
  2.2.3.update() 将其他字典的key-value添加到当前的字典当中
  2.2.4.del 删除字典中的key-value
  2.2.5.popitem() 删除字典最后的一个key-value 这个方法是有返回值的。删除之后它会将删除的key-value作为返回值返回
  2.2.6.pop(key[,default]) 根据key删除自定中的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
 2.3.copy()
  2.3.1.copy() 方法用来对字典进行潜复制(注意:潜复制只会复制字典本身,如果字典中还有个字典是不会进行复制的)
 2.4.遍历字典
  我们主要可以通过3种方式对字典进行遍历
  2.4.1.values() 该方法返回一个序列 序列中保存有字典的值
  2.4.2.items() 该方法会返回字典中所有的项 它返回一个序列,序列中包含有双值子序列 双值分别是 字典中的key和value

d = {
    'name' : "刘亦菲",
     'age':18,
     'gender':'女神',
}

# #len()
# print(len(d))
# #in     not in
# print('name' in d)
# #字典没有索引,只能取键值
# print(d['age'])

#查
#get(key,default)   default为默认值
#如果是没有这个key,返回None,不会报错
#也可以指定一个默认值,来作为第二个参数,这样获取不到key值可以返回默认值
# print(d.get('name'))

#修改字典
# d[key] = value
# d['age'] = 16
# print(d)
# 没有这个key-value就是添加
# d['height'] = 174
# print(d)

#添加 setdefault(key,default)
#如果这个key已经存在于字典中,则返回value值,不会对字典造成影响
#如果不存在,则向字典中添加key-value
# res = d.setdefault('name','周慧敏')
# res = d.setdefault('height','170')
# print(res)

#添加 update()
#将其他字典当中的key-value添加到当前的字典当中
# d1 = {1:'1',2:'2'}
# d.update(d1)
# print(d)

#删除  del   删除字典中的key-value
# del d['age']
# print(d)

#删除  pop  pop(key,default)
res = d.pop('age')
print(res)
res = d.pop('height','不存在')
print(res)
print(d)

#没有remove

#popitem()  随机删除一个键值对,一般都是删除最后一个
#它会将删除后的键值对作为返回值返回
# res = d.popitem()
# print(res)
# print(d)


#clear()    清空字典
# 列表    字典      [x,x,x,x,x,x,x]
# {key:value}   可以通过key查询到value这个值,所以我们也称之为键值对,每一个键值对称呼为一项
#{}
# d = {}
# print(d,type(d))

#当字典中key有重复的时候,后面的数据会替换前面的数据
d = {
    'name' : "刘亦菲",
     'age':18,
     'gender':'女神',
     'name':'周慧敏'
}
print(d['name'])
d1 = dict(name = '刘亦菲',age = 18)
print(d1)

#双值子序列
#双值序列   [1,2],(1,2),'ab'
#子序列    ['a']   #数据类型嵌套
#双值子序列  [(1,2),(3,4)]
# list1 = [(1,2),(3,4)]
# d =dict(list1)
# print(d)
d = {
    'name' : "刘亦菲",
     'age':18,
     'gender':'女神'
    }

print(d.keys())
print(d.values())
print(type(d.items()))    #以列表返回可遍历得(键,值)元组数组
for k in d.keys():  #取得所有value
    print(d[k])
for k,v in d.items():   #取得所有
    print(k, '=' ,v)
for k in d.items():
    print(k,type(k))

3.集合
 3.1.集合简介
  3.1.1.集合表现形式set 集合和列表非常相似
  3.1.2.不同点:集合只能存储不可变对象;集合中存储的对象是无序的;集合不能出现重复元素
  3.1.3.使用{}来创建集合
  3.1.4.可以通过set()来将序列和字典转换成集合
  3.1.5.len() 使用len()来获取集合中元素的数量
  3.1.6.add()像集合中添加元素
  3.1.7.update()将一个集合中的元素添加到另一个集合当中
  3.1.8.pop()随机删除集合中的一个元素一般是删除最后一个元素
  3.1.9.remove() 删除集合中指定的元素
  3.1.10.clear() 清空集合

# s = {}
# print(type(s))
# s = set()   #创建集合的方式
# print(s,type(s))
# s = {6,8}
# a,b = s
# print(a)
# print(b)
# print(s)  #无序性

#集合只能存储不可变对象(sting,元组,int),但是集合是可变的
#集合中存储的对象是无序的,无索引
#集合不能出现重复元素     #用集合做去重的操作

# s = {1,2,3,'asdd',(1,2)}   #不能存储可变对象
# print(s)

# list1 = [1,2,3,4,4,3,2,1]
# print(list(set(list1)))   #将列表中重复元素去重,再添加进一个新的列表中

#增
s = set()   #set()用来创建一个空集合,括号内只能添加一个元素
#in     not in      len()
#add()  添加元素进集合
s.add(1)
print(s)

#update()   将一个集合中的元素添加进另一个集合中
s1 = {2,3,4,(1,2)}
s.update(s1)
print(s)

#pop()  随机删除
# s.pop()
# print(s)

#remove()   指定删除元素
s.remove((1,2))
print(s)

#clear()

thisset = {"Google", "Runoob", "Taobao"}
thisset.add("Facebook")
print(thisset)

4.深拷贝和浅拷贝

d = {
    'name' : "刘亦菲",
     'age':18,
     'gender':'女神',
    'friend':{
        'name':'唐嫣',
        'age':32
    }
}

#浅拷贝:第二层数据的id一样,拷贝之后的对象和原对象id不一样
#第二层的数据只能引用
d1 = d.copy()
print(id(d),id(d1))
print(id(d['friend']),id(d1['friend']))

#深拷贝    把所有层次的数据重新拷贝成为一个新的对象
import copy
#浅拷贝
d2 = copy.copy(d1)
print(d2,id(d1), id(d2))

# d2 = copy.deepcopy(d)
# print(id(d),id(d2))
# print(id(d['friend']),id(d2['friend']))

5.作业

#有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。
li = [11,22,33,44,55,66,77,88,99,90]
dic = {}
n = []
m = []
for i in li:
    if i > 66:
        n.append(i)
    if i < 66:
        m.append(i)
dic.update(k1 = m, k2 = n)
#找到python1/python2/python3
a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}}
i = 0
while True:
    print(a["data"]["result"][i]["src"])
    i += 1
    if i == 3:
        break
#自学练习
# 功能要求:
# 要求用户输入总资产,例如:2000
# 显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品总额大于总资产,提示余额不足,否则,购买成功。
goods = [
    {"name": "电脑", "price": 1999},
    {"name": "鼠标", "price": 10},
    {"name": "游艇", "price": 20},
    {"name": "美女", "price": 998}
]
admin_money = int(input("请输入您现有的钱:"))
goods_dict = {}
goods_dict1 = {}
j = 0
k = []
for i in goods:
    j += 1
    goods_dict[j] = i["name"]
print(goods_dict)
for m in goods:
    goods_dict1.setdefault(m['name'],m['price'])
j = 0
admin_goods = 0
while True:
    k.append(int(input("以下添加想要商品的序号,添加完成按0确认:")))
    if k[j] == 0:
        k.remove(k[j])
        for i in k:
            admin_goods += goods_dict1[goods_dict[i]]
        else:
            print("购物车中商品价格:",admin_goods)
            if admin_goods >= admin_money:
                print("not enough money")
            else:
                print("enough")
            break
    else:
        j += 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值