zoukankan      html  css  js  c++  java
  • python 13day--集合、字符串格式化

    一、set是一个无序且不重复的元素集合

    1、集合需要掌握的知识点:

     1 #作用:去重,关系运算,
     2 
     3 #定义:
     4             知识点回顾
     5             可变类型是不可hash类型
     6             不可变类型是可hash类型
     7 
     8 #定义集合:
     9             集合:可以包含多个元素,用逗号分割,
    10             集合的元素遵循三个原则:
    11              1:每个元素必须是不可变类型(可hash,可作为字典的key)
    12              2:没有重复的元素
    13              3:无序
    14 
    15 注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
    16  
    17 
    18 #优先掌握的操作:
    19 #1、长度len
    20 #2、成员运算in和not in
    21 
    22 #3、|合集
    23 #4、&交集
    24 #5、-差集
    25 #6、^对称差集
    26 #7、==
    27 #8、父集:>,>= #9、子集:<,<=

    2、集合的关系运算

      一.关系运算
      有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
      pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
      linuxs={'wupeiqi','oldboy','gangdan'}
      1. 求出即报名python又报名linux课程的学员名字集合
      2. 求出所有报名的学生名字集合
      3. 求出只报名python课程的学员名字
      4. 求出没有同时这两门课程的学员名字集合
    

      

     1 # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
     2 pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
     3 linuxs={'wupeiqi','oldboy','gangdan'}
     4 # 求出即报名python又报名linux课程的学员名字集合
     5 print(pythons & linuxs)
     6 # 求出所有报名的学生名字集合
     7 print(pythons | linuxs)
     8 # 求出只报名python课程的学员名字
     9 print(pythons - linuxs)
    10 # 求出没有同时这两门课程的学员名字集合
    11 print(pythons ^ linuxs)

    3、集合的应用举例:

    二.去重
    
       1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
    
       2.在上题的基础上,保存列表原来的顺序
    
       3.去除文件中重复的行,肯定要保持文件内容的顺序不变
       4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
    
    l=[
        {'name':'egon','age':18,'sex':'male'},
        {'name':'alex','age':73,'sex':'male'},
        {'name':'egon','age':20,'sex':'female'},
        {'name':'egon','age':18,'sex':'male'},
        {'name':'egon','age':18,'sex':'male'},
    ]
     1 #去重,无需保持原来的顺序
     2 l=['a','b',1,'a','a']
     3 print(set(l))
     4 
     5 #去重,并保持原来的顺序
     6 #方法一:不用集合
     7 l=[1,'a','b',1,'a']
     8 
     9 l1=[]
    10 for i in l:
    11     if i not in l1:
    12         l1.append(i)
    13 print(l1)
    14 #方法二:借助集合
    15 l1=[]
    16 s=set()
    17 for i in l:
    18     if i not in s:
    19         s.add(i)
    20         l1.append(i)
    21 
    22 print(l1)
    23 
    24 
    25 #同上方法二,去除文件中重复的行
    26 import os
    27 with open('db.txt','r',encoding='utf-8') as read_f,
    28         open('.db.txt.swap','w',encoding='utf-8') as write_f:
    29     s=set()
    30     for line in read_f:
    31         if line not in s:
    32             s.add(line)
    33             write_f.write(line)
    34 os.remove('db.txt')
    35 os.rename('.db.txt.swap','db.txt')
    36 
    37 #列表中元素为可变类型时,去重,并且保持原来顺序
    38 l=[
    39     {'name':'egon','age':18,'sex':'male'},
    40     {'name':'alex','age':73,'sex':'male'},
    41     {'name':'egon','age':20,'sex':'female'},
    42     {'name':'egon','age':18,'sex':'male'},
    43     {'name':'egon','age':18,'sex':'male'},
    44 ]
    45 # print(set(l)) #报错:unhashable type: 'dict'
    46 s=set()
    47 l1=[]
    48 for item in l:
    49     val=(item['name'],item['age'],item['sex'])
    50     if val not in s:
    51         s.add(val)
    52         l1.append(item)
    53 
    54 print(l1)
    55 
    56 
    57 
    58 
    59 
    60 
    61 #定义函数,既可以针对可以hash类型又可以针对不可hash类型
    62 def func(items,key=None):
    63     s=set()
    64     for item in items:
    65         val=item if key is None else key(item)
    66         if val not in s:
    67             s.add(val)
    68             yield item
    69 
    70 print(list(func(l,key=lambda dic:(dic['name'],dic['age'],dic['sex']))))

    二、字符串格式

    1、c语言式的格式化方法之占位符

    str1 ='sb'
    str2 ='big'
    print('alex is a %s %s'%(str2,str1))

    2、利用format格式化

    1 dic = {'a1':'big','a2':'sb'}
    2 print('alex is a {0} {1}'.format(str2,str1))
    3 print('alex is a {a1} {a2}'.format(a1= "big",a2='sb'))
  • 相关阅读:
    python基础-函数递归
    JS中变量、作用域的本质,定义及使用方法
    JS数据类型和堆栈+变量比较和值的复制+参数传递和类型检测
    宣传页项目开发(三)
    宣传页项目开发(二)
    宣传页项目实战
    CSS Sprite雪碧图应用
    PS切图工具
    根据js轮播图原理写出合理的结构与样式、并实现js交互效果
    JS事件流、DOM事件流、IE事件处理、跨浏览器事件处理、事件对象与类型
  • 原文地址:https://www.cnblogs.com/yuzhiboyou/p/10135254.html
Copyright © 2011-2022 走看看