python语言篇(6知识点)

字典的成员资格判断 in / not in 运算符
  用 in 运算符可以判断一个键是否存在于字典中,如果存在则返回True,否则返回False
  not in 返回值与 in 相反

示例:
  d = {1: "一", 2: "二"}
  1 in d      # True
  2 in d      # True
  2 not in d  # False
  8 not in d  # True
  8 in d      # False
  '一' in d   # False

列表的 in 运算符和字典的 in 运算符比较:
  1. 列表的in运算符计算时间会因列表中元素个数的增加而增加
    L = [3,7,0,1,4,5,6....... 10976]  # 大约有十万个
    if 888 in L:
        print("888在列表里")  # 慢
  2. 字典的in运算符计算时间不会因键值对的个数增加而增加,操作速度快于列表
    d = {3: "三", 7: "xx", 0: None, ... 10976:None}
    if 888 in d:
         print("888在字典的键里")  # 快

字典的迭代访问:
  容器是可迭代对象,字典只能对键进行迭代访问
    d = {'name': '小张', 'birthday': (2008,8,8)}
    for k in d:
        print(k)

可以用于字典的内建(built-in)函数:
  len(x)  返回字典的键值对的个数
  max(x)  返回字典的键的最大值
  min(x)  返回字典的键的最小值
  sum(x)  返回字典的所有键的和
  any(x)  对所有键进行真值测试,有一个为True结果为True
  all(x)  对所有键进行真值测试,所有为True才为True

字典的方法:
  见:
    >>> help(dict)
  或
    file: python_base_docs_html/dict_xxxx.html 

练习:
  输入一个字符串代表星期几(0~6), "0"/'日'代表周日,'1'/'一' 代表周一.
  '2'/'二' 代表周二.......... '6'/'六' 代表 周六
  任意输入字符串,打印这个字符串是否代表星期几,如果不是以上字符打印"字典内没有相应的数据"
    (要求将以上数据存于字典中, 键为字符串:'0123456日一二三...六'中的一个,值为星期几或周几) 
  d = {
       '0': "星期天",
       '日': "星期天",
       '1': "星期一",
       .....
      }

字典推导式:
  作用:
    用可迭代对象生成字典
  语法:
    {键表达式 : 值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
  注: []的内容代表可省略

示例:
  # 生成一个字典,键为10以内的数字,值为键的平方
  d = {x : x ** 2 for x in range(10)}

练习:
  1. 有字符串列表如下:
      L = ["tarena", 'xiaozhang', 'hello']
    用推导式生成如下字典:
      d = {"tarena":6, 'xiaozhang':9, 'hello':5}
    注: 字典的值为键的长度

  2. 有两个列表:
    no = [1001, 1002, 1003, 1004]
    names = ['Tom', 'Jerry', 'Spike', 'Tyke']
    用no中的编码为作为键,以names中的字符串作为值,生成相应的字典
    提示 : range(4)来生成索引

字典推导式的嵌套:
  语法同列表推导式嵌套

字典 VS 列表
  1. 都是可变对象
  2. 索引方式不同, 列表用整数索引,字典用键索引
  3. 字典的查找速度可能会快于列表(重要)
  4. 列表的存储是有序的,字典的存储是无序的


集合 set
  集合是可变的容器
  集合内的数据对象都是唯一的(不能重复多次的)
  集合是无序的存储结构,集合中的数据没有先后顺序关系
  集合内的元素必须是不可变对象
  集合是可迭代对象
  集合是相当于只有键没有值的字典(键则是集合的数据)

创建空的集合:
  set()
创建非空的集合:
  s = {1, 2, 3, 4}

集合的构造函数 set
  set()  创建一个空的集合对象(不能用{}来创建空集合)
  set(iterable)  用可迭代对象创建一个新的集合对象

示例:
  s = set()  # s 为空集合
  s = {3,5,7,9}
  s = set("ABC")  # s = {'A', 'B', 'C'}
  s = set({1:'1', 2:"2", 5:'5'}) # s = {1,2,5}
  s = set(range(1:10:3))  # s = {1,4,7}

集合的运算:
  交集, 并集,补集,子集,超集
运算符:
  & | - ^ < <= > >= == !=
  in / not in

& 生成两个集合的交集
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 & s2   # {2, 3}

| 生成两个集合的并集
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 | s2   # {1, 2, 3, 4}

- 生成两个集合的补集
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 - s2   # {1} #生成属性s1但不属于s2的所有元素的集合

^ 生成两个集合的对称补集
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 ^ s2  # {1, 4}

> 判断一个集合是另一个集合的超集
< 判断一个集合是别一个集合的子集
  {1, 2, 3} > {1, 2}  # True
  {2, 3, 1} > {3, 2}  # True
  {2, 3, 4} < {1, 2, 3, 4}  # True

== / != 集合相同和不同
  {1, 2, 3} == {3, 2, 1}  # True
  {1, 2, 3} != {2, 3, 4}  # True

in / not in 运算符
  in 等同于字典的in, 用于集合中,当某个值存在于集合中,返回True,否则返回False
  not in 与 in 返回值相反

  集合的 in / not in 运算符的速度快于序列

能用于集合的函数:
  len(x)
  max(x)
  min(x)
  sum(x)
  any(x)
  all(x)

集合是可迭代对象


集合练习:
  经理有: 曹操,刘备,周瑜
  技术员有: 曹操,周瑜,张飞,赵云
  用集合求:
    1. 即是经理也是技术员的有谁?
    2. 是经理,但不是技术员的有谁?
    3. 是技术人员,但不是经理的都有谁?
    4. 张飞是经理吗?
    5. 身兼一职的人都有谁?
    6. 经理和技术员共有几个人?

python3 集合中的常用方法:
  见:
    >>> help(set)
  或:
    python_base_docs_html/set_????.html

集合推导式 
  集合推导式是用可迭代对象生成集合的表达式

  语法:
    { 表达式 for 变量 in 可迭代对象 [if 真值表达式]}
    注: [] 内的内容可省略

  示例:
    numbers = (1,2,3,2,2,3,3,4,5)
    s = {x for x in numbers}  # 去除重复的元素


固定集合 frozenset
  固定集合是不可变的,无序的,含有不重复元素的集合

  作用:
    固定集合可以作为字典的键,还可以作为集合的值

创建空的固定集合
   fs = frozenset()

创建非空的固定集合:
   frozenset(iterable)  用可迭代对象创建新的固定集合
  示例:
    fz = frozenset([2,3,5,7]) # frozenset({2, 3, 5, 7})

运算:
  & 交集
  | 并集
  - 补集
  ^ 对称补集
  in /not in 运算
  < <= > >= == !=
  (以上运算 与 set 的运算完全相同)

固定集合的方法:
  相当于集合的全部方法(去掉修改集合的方法)


列表 ,字典,集合对象优缺点:
  1. 都为可变
  2. 列表的尾部插入速度比较快,查中间插入和头插数据速度慢
  3. 列表有序
  4. 字典添加,删除,修改速度快于列表
  5. 集合的添加,删除快于列表,且不能存储重复元素

练习:
  1. 输入一段字符串,打印所有输入过的字符串,但重复的只打印一次,(不要求打印的顺序与输入顺序一致)
    输入: abcdabcaba
    打印:
      a b c d

  2. 输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数:
    如:
      输入:abcdabcaba
    打印如下:
      a: 4次
      b: 3次
      d: 1次
      c: 2次
      注: 不要求打印顺序    


练习:
  1. 有一只小猴子,摘了很多桃.
     第一天吃了全部桃子的一半,感觉不饱又吃了一个
     第二天吃了剩下桃子的一半,感觉不饱又吃了一个
     .... 以此类推
     到第十天,发现只剩下一个了
    请问第一天摘了多少个桃?
  2. 完全数
    1 + 2 + 3 = 6 (6为完全数)  
      1, 2, 3都为6的因数(能被一个数x整除的数为y,则y为x的因数)
      1 x 6 = 6
      2 x 3 = 6
    完全数是指除自身以外的所有的因数之和相加等于自身的数
    求 4 ~ 5个完全数,并打印出来
    答案:
      6
      28
      496
      8128
  3. 任意输入一个数n代表三角形的高度, 打印此形将的三角形
    如:
      请输入:4
    打印如下:
        1
       121
      12321
     1234321
  4. 将第三题打印三角形变为打印棱形  
        1
       121
      12321
     1234321
      12321
       121
        1

猜你喜欢

转载自blog.csdn.net/Jason_Edison/article/details/88700863