Now代码1005行

回顾

  1. 字典的初识

    • 查询速度快,{'name':'tangdaren'},存储大量关联型数据
    • 键:int、str(bool tuple不常用)不可变的数据类型
    • 值:任意数据类型
    • 3.5x前无序,3.6x按照初始时的顺序排列,3.7x有序
  2. 字典的增删改查

    • 增:setdefault()设置默认值,有则不变、无则增加
    • 删:pop()按照键删(可设置返回值)clear del
    • 改:dic['name']='henri'
    • 查:get
    • 特殊:keys() value() items()
  3. 字典的嵌套。

  4. #面试题,字符串处理成字典
    msg='k:1|k1:2|k2:3|k3:4'
    #分割
    msg=msg.strip()
    msg=msg.split('|')
    print(msg) #['k:1', 'k1:2', 'k2:3', 'k3:4']
    #对每个元素操作,for循环
    dic={}
    for i in msg:
    #每次循环以冒号分离
    key,value=i.split(':')
    dic[key.strip()]=int(value)
    print(dic) #{'k': 1, 'k1': 2, 'k2': 3, 'k3': 4}

今日内容

  1. is == id用法

    • id:相当于身份证号,唯一,获取内存地址id()

      #id身份证号,内存地址
      s='asdawq'
      print(id(s)) #2667094447640 #==
      l1=[1,2,3]
      l2=[1,2,3]
      print(l1==l2) ##==比较的是两边值是否相等 s1='henri'
      s2='henri '
      print(s1==s2) #False #is
      l1=[1,2,3]
      l2=[1,2,3]
      print(id(l1)) #1315641372232
      print(id(l2)) #1315641372424
      print(l1 is l2) #False #is判断的是内存地址是否相同
      • id相同,值一定同,反之,不一定
  2. 代码块

    • 所有代码都需要依赖代码块执行

    • 块是一个python程序的文本,是作为一个单元执行的

    • 一个模块、一个函数、一个类、一个文件都是一个代码块

    • 交互式命令下一行就是一个代码块。

  3. 两个机制:同一个代码块下,有一个机制。不同的代码块下,遵循另一个机制。

  4. 同一代码块下的缓存机制

    • 前提条件:同一代码块内
    • 机制内容:pass
    • 适用的对象:int bool str
    • 具体细则:所有的数字,bool,几乎所有的str
    • 优点:提升性能、节省内存
  5. 不同代码块下的缓存机制(小数据池)

    • 前提条件:不同代码块里
    • 机制内容:pass
    • 适用的对象:int bool str
    • 具体细则:-5~256的数字、满足一定规则的字符串
    • 优点:提升性能、节省内存
  6. 总结

    • 面试题考
    • 回答的时候要分清楚:同一个代码块下适用一个缓存机制,不同代码块下适用另一个机制
    • 小数据池:数字范围-5~256
  7. python基础数据类型之:集合set(了解)。容器型数据类型

    • 它要求里面的元素是不可变的数据类型。int str bool tuple
    • 但是它本身是可变的。
    • 集合是无序的
    • {}其中放元素是集合,放键值对是字典
    1. 集合的作用

      • 列表的去重
      • 关系测试:交集、并集、差集……
    2. 集合的创建
    ##集合的创建
    #set1=set({1,3,'henri',False})
    #法2
    set1={1,3,'henri',4,5,1,'F',False}
    print(set1) #无序的
    #空集合的表示
    set()
    print(set(),type(set())) #set() <class 'set'>
     3. 集合有效性测试
    # 集合的增删
    set1={'henri','tangdaren','F',1,2,3,4,5,23}
    # 增
    # add
    set1.add('xx')
    # update迭代着增 # 删
    # remove按元素删 # 不能改,只能先删再增,变相改值
    1. 交并差

      ##交并差
      set1={1,2,3,4,5,6,7}
      set2={3,4,5,6,7,8}
      #交集
      print(set1 & set2) #{3, 4, 5, 6, 7}
      #并集
      print(set1 | set2) #{1, 2, 3, 4, 5, 6, 7, 8}
      #差集
      print(set1 - set2) #{1, 2}
      #反交集,找出不共有的元素
      print(set1^set2) #{1, 2, 8} #子集<
      print(set1<set2) #False
      #超集>
      print(set1>set2)
    2. 列表去重,把list先转换成集合,再转回list

  8. 深浅copy(面试会考)

    • 赋值运算

      #赋值运算
      l1=[1,2,3,[22,33]]
      l2=l1
      l1.append(666)
      print(l1) #[1, 2, 3, [22, 33], 666]
      print(l2) #[1, 2, 3, [22, 33], 666]
    • 浅copy

      #浅copy
      l1=[1,2,3,[22,33]]
      l2=l1.copy()
      l1.append(666)
      print(l1) #[1, 2, 3, [22, 33], 666]
      print(l2) #[1, 2, 3, [22, 33]] #另一种情况,说明浅copy外壳不同,但里面元素是共用的
      l1=[1,2,3,[22,33]]
      l2=l1.copy()
      l1[-1].append(666) #大列表中嵌套的小列表里追加元素
      print(l1) #[1, 2, 3, [22, 33, 666]]
      print(l2) #[1, 2, 3, [22, 33, 666]]

    • 深copy

      #深copy
      import copy
      l1=[1,2,3,[22,33]]
      l2=copy.deepcopy(l1)
      l1[-1].append(666)
      print(l1) #[1, 2, 3, [22, 33, 666]]
      print(l2) #[1, 2, 3, [22, 33]]

      python对深copy做了优化,不可变的数据类型共用,可变的自己用自己的

      #这是浅copy
      l1=[1,2,3,[22,33]]
      l2=l1[:]
      l1[-1].append(666)
      print(l1) #[1, 2, 3, [22, 33, 666]]
      print(l2) #[1, 2, 3, [22, 33, 666]]
      • 浅copy:list、dict:嵌套的可变的数据类型是同一个
      • 深copy:list、dict:嵌套的可变的数据类型不是同一个

总结

  • id is ==三个方法
  • 回答的时候要分清楚:同一个代码块下适用一个缓存机制,不同代码块下适用另一个机制
  • 小数据池:数字范围-5~256
  • 优点:提升性能、节省内存
  • 集合:列表去重,关系测试。
  • 深浅copy:理解浅copy

练习

#看代码写结果
v={}
for index in range(10):
v['users']=index
print(v)
'''
{'user':9}
'''
#
goods=[
{'name':'电脑','price':1999},
{'name':'鼠标','price':10},
{'name':'游艇','price':20},
{'name':'手机','price':998},
]
#1.按‘序号 名称 价格’显示
#想显示每个商品,for
for i in range(len(goods)):
print(i+1,goods[i]['name'],goods[i]['price'])
#2.用户输入选择的商品序号,然后打印商品名称以及商品价格
#用户输入,input
#3.如果用户输入序号有误,提示输入有误,并重新输入
#4.用户输入Q或者q,退出程序。
#upper或lower
flag=False
while flag==False:
count=input('请输入你选择的商品序号(按q或Q退出):')
if count.upper()=='Q':
break
elif count=='1' or count=='2' or count=='3' or count=='4':
print(goods[int(count) - 1]['name'], goods[int(count) - 1]['price'])
flag = True
else:
print('输入序号有误,请重新输入。')

明天内容

1.基础数据内容补充

2.编码进阶

代码总数1005+175=1180行

python06day的更多相关文章

随机推荐

  1. 【LeetCode】961. N-Repeated Element in Size 2N Array 解题报告(Python & C+++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...

  2. 【LeetCode】771. Jewels and Stones 解题报告

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 数组count 字典Counter 日期 题目地址 ...

  3. 【剑指Offer】孩子们的游戏(圆圈中最后剩下的数) 解题报告(Python)

    [剑指Offer]孩子们的游戏(圆圈中最后剩下的数) 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-in ...

  4. codeforce -602B Approximating a Constant Range(暴力)

    B. Approximating a Constant Range time limit per test 2 seconds memory limit per test 256 megabytes ...

  5. MyEclipse编写jsp很卡的修改方法 (转载)

      原文来源   Post IP : 180.156.210.*       1,改默认编辑模式就可以了.将默认编辑器由"myeclipse visual jsp designer" ...

  6. Service有多个实现类,它怎么知道该注入哪个ServiceImpl类

    方法一:Controller中注入service的时候使用@Autowired自动注入,@Qualifier("beanId")来指定注入哪一个. 方法二:Controller中注 ...

  7. MySQL高级查询与编程笔记 • 【第5章 常见数据库对象】

    全部章节   >>>> 本章目录 5.1 视图 5.1.1 视图的定义 5.1.2 视图的优点 5.1.3 视图的创建和使用 5.1.4 利用视图解决数据库的复杂应用 5.1. ...

  8. Java初学者作业——编写Java程序,实现判断所输入字符的类型(数字、小写字母、大写字母或其他字符)

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现判断所输入字符的类型(数字.小写字母.大写字母或其他字符) 实现思路: 声明变量c,用于存储用户输入的字符. 通过Scanner接收用户输入 ...

  9. Oracle 创建数据表以及对数据表、字段、主外键、约束的操作

    选择主键的原则: 最少性 尽量选择使用单个键作为主键 稳定性 尽量选择数值更新少的列作为主键 1.创建数据表(CREATE TABLE) --创建数据表Student create table Stu ...

  10. docker简单安装

    docker的安装官网有很直接的教程,直达链接: Ubuntu:https://docs.docker.com/engine/install/ubuntu/ CentOS:https://docs.d ...