zoukankan      html  css  js  c++  java
  • python入门13 集合set

    set集合与数学中的集合同一个概念,是无序不重复元素组成的。

    #coding:utf-8
    #/usr/bin/python
    """
    2018-11-10
    dinghanhua
    集合
    """
    
    '''集合是无序的不重复的元素序列,不支持索引'''
    
    '''定义'''
    set1 = {1,2,3,2}
    print(set1) #元素不重复
    
    set2 = set('python is easy to use')
    print(set2)
    '''set用于list,string去重'''
    li = ['peter','jary','peter','fee']
    set_list = list(set(li)) #set > list
    print('取list不重复的数据',set_list)
    
    str1 = 'jwejfewfjewpfjepw'
    set_str = str(set(str1))
    print('set用于取字符串的不重复字符:',set_str)
    '''添加、删除元素、长度、元素是否存在'''
    set1.add('grape')
    print(set1)
    
    set2.update(['watermelon'])
    set2.update(('pear','apple'))
    set2.update({'whatever'})
    print(set2)
    
    set2.remove('apple')
    set2.discard('tomato')
    which = set2.pop() #随机删
    print(which)
    print(set2)
    
    #长度
    print(len(set1))
    #清空
    set1.clear()
    print(set1)
    #是否包含某元素
    print( 'apple' in set2)
    '''集合的运算:并集、差集、交集'''
    set1 = {'apple','pear','banana'}
    set2 = {'peach','orange','tomato','potato','pear'}
    set3 = {'banana'}
    
    print('交集 在set1,set2同时存在的',set1&set2)
    print(set1.intersection(set2))
    
    print('差集,在set1,不在set2的',set1-set2)
    print(set1.difference(set2))
    
    print('只在一个集合里的',set1^set2)
    print(set1.symmetric_difference(set2))
    
    print('并集,在set1或set2的',set1 | set2)
    print(set1.union(set2))
    
    print(set1.isdisjoint(set2)) #是否没有交集 有交集-False,没交集-True
    print(set3.issubset(set2)) #set3是否是set2的子集
    print(set1.issuperset(set3)) #set1是否是set3的父集
    '''练习:a和b大列表去重'''
    a = [1,3,5,3,2,6]
    b = [3,2,2,6,4]
    c = []
    for x in a+b:
        if x not in c:
            c.append(x)
    print(c)
    
    ss = list(set(a+b)) #set的不重复性去重 c1
    = sorted(list(set(a+b)),key = (a+b).index) print(c1)


    li = {}.fromkeys(a+b).keys() #利用字典keys不重复特性去重
    '''练习:去除姓氏(只考虑单姓)相同的人员,保留最后一个'''
    li = ['刘能','王老七','谢广坤','赵玉田','杨晓燕','刘大脑袋','王长贵','谢飞及','赵四','王大拿']
    
    # 从后往前遍历每个元素,当姓氏不存在与姓氏列表中则分别插入姓名和姓氏
    linew = []
    lixing = []
    for x in li[::-1]: #从后往前取
        if x[0] not in lixing: #姓氏不存在,则插入姓氏,插入人名
            linew.insert(0,x) #在第一个位置插入人名,保持顺序
            lixing.append(x[0]) #插入姓氏
    print(linew)
    linew = []
    for x in li[::-1]: #从后往前取
        if x[0] not in set([y[0] for y in linew]): #姓氏在新列表中不存在
            linew.insert(0,x)
    print(linew)
    # 取出所有姓氏,从后往前遍历,遍历到所有姓氏均取出一个姓名为止
    set_xing = set([x[0] for x in li]) #取出所有的姓氏
    linew = []
    for x in li[::-1]:
        if x[0] in set_xing:
            linew.insert(0,x) #匹配一个插入一个
            set_xing.remove(x[0]) #匹配上的姓去掉
            if len(set_xing) == 0:
                break  #集合为空跳出循环
    print(linew)
    
    # 取出所有姓氏,遍历姓氏在列表中的索引,取索引对应的姓名
    li_xing = [x[0] for x in li[::-1]] #倒着取出姓氏
    set_xing = sorted(list(set(li_xing)),key = lixing.index) #取出姓氏集合,转化为列表保持与列表同一顺序
    linew = []
    for x in set_xing:
        xindex = li_xing.index(x) #取姓在姓氏列表里面的索引
        linew.insert(0,li[::-1][xindex]) #根据索引取名字
    print(linew)
    
    
    # map函数
    def func(x):
        for y in li[::-1]:
            if x[0] == y[0]:
                return y
    li2 = set(map(func,li))
    print(li2)
    
    # 取出所有姓氏,遍历集合,在列表从后往前找匹配的姓名
    set_xing = set( [x[0] for x in li]) #取出姓氏集合
    linew = []
    for x in set_xing:
        for name in li[::-1]:
            if name.startswith(x):
                linew.append(name)
                break
    print(sorted(linew,key = li.index))
    
    # dict key的不重复特性
    dict_name = {}
    for name in li:
        dict_name[name[0]] = name
    print(dict_name)

    the end!

  • 相关阅读:
    WHERE col1=val1 AND col2=val2;index exists on col1 and col2, the appropriate rows can be fetched directly
    MySQL 交集 实现方法
    MBProgressHUD的使用
    Xcode4 使用 Organizer 分析 Crash logs(转)
    SimpleXML 使用详细例子
    PHP的XML Parser(转)
    iPhone,iPhone4,iPad程序启动画面的总结 (转)
    Pop3得到的Email 信件格式介绍
    yii总结
    隐藏Tabbar的一些方法
  • 原文地址:https://www.cnblogs.com/dinghanhua/p/9941102.html
Copyright © 2011-2022 走看看