zoukankan      html  css  js  c++  java
  • Python--set笔记以及 练习

    __author__ = 'miaoge'

    '''
    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),
    但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
      去重,把一个列表变成集合,就自动去重了
    关系测试,测试两组数据之前的交集、差集、并集等关系。
    集合(set)是一个无序的不重复元素序列。
    可以使用大括号 { } 或者 set() 函数创建集合,
    注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
    '''


    # 1 创建一个空的集合
    se = set()

    # 2 直接创建(集合的元素是不可变的,集合不能作为字典的K)
    # se = {'nihao',999,[1,2,3]}
    se = {'nihao',999,(1,2,3),True,9.8}

    set1 = set({1,2,'barry'})
    set2 = {1,2,'barry'}
    print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'}

    # 3 列表的推导式
    set3 = {i*2 for i in range(9)}


    # 增
    se = {1,2,3,4}
    se.add(5) #追加5 如果5存在就不追加
    print(se)

    #update:迭代着增加
    se.update('A')
    print(se)
    se.update([1,2,3])
    print(se)



    #删
    set1 = {'alex','wusir','ritian','egon','barry'}
    # set1.remove('alex') # 删除一个元素
    # print(set1)

    set1.pop() # 随机删除一个元素
    print(set1)

    # set1.clear() # 清空集合
    # print(set1)

    # del set1 # 删除集合
    # print(set1)


    #4.1 交集。(& 或者 intersection)
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 & set2) # {4, 5}
    print(set1.intersection(set2)) # {4, 5}

    # 4.2 并集。(| 或者 union)
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8}
    print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7,8}


    # 差集。(- 或者 difference)
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 - set2) # {1, 2, 3}
    print(set1.difference(set2)) # {1, 2, 3}


    # 4反交集。 (^ 或者 symmetric_difference)
    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}
    print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}

    # 5子集与超集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}

    print(set1 < set2)
    print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。

    print(set2 > set1)
    print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。

    # frozenset不可变集合,让集合变成不可变类型。
    s = frozenset('barry')
    print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>






    # 1:构建一个列表(使用列表推导式,和list(iterable)和列表相加的方式完成

    l = [ i for i in range(1,10) ] + list('jqka')
    print(l)

    # 2:使用列表推导式完成找
    # 找到嵌套列表中名字含有两个‘e’的所有名字
    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
    ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    l = [j for i in names for j in i if j.count('e') == 2]
    print(l,'----')

    # name = []
    # for n in names:
    # for x in n:
    # if x.count('e') == 2:
    # name.append(x)
    #
    # print(name)

    # 3:将一个字典的key和value对调
    mcase = {'a': 10, 'b': 34}
    #1
    new_macase = {value:key for key,value in mcase.items()}
    #2
    # i = dict(zip(mcase.values(),mcase.keys()))
    # print(i)

    print(new_macase)



    # 4:合并大小写对应的value值,将k统一成小写
    mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
    print({x.lower():mcase.get(x.lower(),0)+mcase.get(x.upper(),0) for x in mcase.keys()})


    # 5 :集合推导式

    squared = {x**2 for x in [1, -1, 2]}
    print(squared)


    # 6:去重 l = [1,2,3,4,5,6,3,3,3,3,3,3]
    # 用两种方式,第一种,给一个空list,判断添加
    # 第二种,list ---->set

    li = [1,2,3,4,5,6,3,3,3,3,3,3]
    li = set(li)
    print(li)



    # 7:集合练习:
    set1 = {'曹操','刘备','周瑜'} #经理
    set2 = {'曹操','周瑜','张飞','赵云'} #技术员
    # 经理有: 曹操,刘备,周瑜
    # 技术员有: 曹操,周瑜,张飞,赵云
    # 用集合求:
    # 1即是经理也是技术员的有谁?
    print(set1 & set2) # {4, 5}
    # 2是经理,但不是技术员的有谁?
    print(set1 - set2)
    # 3是技术人员,但不是经理的都有谁?
    print(set2 - set1)
    # 4张飞是经理吗?
    print('张飞' in set1)
    # 5身兼一职的人都有谁?
    print(set1 ^ set2)
    # 6经理和技术员共有几个人?
    print(set1 | set2)


    # 输入一段字符串,打印所有输入过的字符串,但重复的只打印一次,(不要求打印的顺序与输入顺序一致)
    # 输入: abcdabcaba
    # 打印:
    # a b c d
    # se = set(input('请输入:'))
    # print(se)


    # 9输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数:
    # 如:
    # 输入:abcdabcaba
    # 打印如下:
    # a: 4次
    # b: 3次
    # d: 1次
    # c: 2次
    # 注: 不要求打印顺序
    # l = input("输入:")
    # li = {}
    # for i in l:
    # if i not in li:
    # li[i] = 1
    # else:
    # # li[i] += 1
    # li[i] = li[i] + 1
    # print(li)

    # 10:把上次写的用户管理案例,按字典的形式改写一下



    # s1 = 'python,java,php,go,c,python,java,php,go,c,python,java,php,go,c,'
    # 统计每个单词出现的次数,
    # 输出格式参看下面
    s1 = 'python,java,php,go,c,python,java,php,go,c,python,java,php,go,c'
    # l = s1.split(',')
    # li = {}
    # for i in l:
    # if i not in li:
    # li[i] = 1
    # else:
    # li[i] = li[i] + 1
    #
    # for k,v in li.items():
    # print(f'{k},{v}次')



    import collections
    li = s1.split(',')
    print(collections.Counter(li),'-----')
    for w,c in collections.Counter(li).items():
    print(w,c,sep=' : ')



  • 相关阅读:
    创建两种dialog的方法
    m^n实现,利用递归的方法
    MFC中SendMessage和PostMessage两种发送消息用法
    char *的十六进制字符串转化成long
    MFC禁用关闭按钮、最小化、最大化
    didReceiveMemoryWarning
    dispatch_async 与 dispatch_get_global_queue
    iphone中Button的currentTitle和titleLabel.text的使用
    IOS开发之手势——UIGestureRecognizer 共存
    Android中的Activity的生命周期图
  • 原文地址:https://www.cnblogs.com/Rice-Ayba/p/13330999.html
Copyright © 2011-2022 走看看