美文网首页
【Python_perl】列表_数组求并集,交集,补集

【Python_perl】列表_数组求并集,交集,补集

作者: Silver_42ac | 来源:发表于2019-08-11 23:14 被阅读0次

    为了方便对应这里给出perl python 对应关系

    python,perl数据结构关系:
    数组(array) 对应 列表(list)
    哈希(hash)对应 字典(dict)

    【perl】
    求并集,交集前;需要补充一个perl的数组(array)与哈希(hash)互换

    #数组(array)转为哈希(hash)
    my %a=map{$_=>1} @a;
    my %b=map{$_=>1} @b;
    
    #哈希(hash)转为数组(array)
    @c=keys %c;
    @c=map {$_=>1} @a,@b;# 两个数组合并;利用hash特性,过滤掉重复的keys
    
    #grep主过滤
    grep{判断式} @array
    #map主操作
    map{判断式;或者操作式,如存字典} @array
    

    前期准备

    #定义两个数组
    my @a=("a","b","c","d","e");
    my @b=("b","g","f","e");
    
    #数组转化为字典,作为后面交集并集的准备;
    my %a=map{$_=>1} @a;
    my %b=map{$_=>1} @b;
    
    #交集
    @A = grep( $a{$_}, @b ) ;
    print "交集:@inter \n";
    
    #并集
    %merge=map {$_=>1} @a,@b;
    @merge=keys %merge;
    
    #补集
    #补集定义:A的补集是全集与A的差集,即全集减去A.
    
    #并集#获取两者差异内容
    @B1=grep(!defined $a{$_}, @b);#b集合元素在a集合中不存在单独内容
    @B2=grep(!defined $b{$_}, @a);#a集合元素在b集合中不存在单独内容
    
    # @a,@b的补集@ca,@cb,即@a和@b相对于@merge的补集
    my @ca = grep {!$a{$_}} @merge;
    my @cb = grep {!$b{$_}} @merge;
    print "\@a的补集:@ca \n";
    print "\@b的补集:@cb \n";
    

    【python】

    #交集
    #方法1
    a = [2, 3, 4, 5]
    b = [2, 5, 8]
    tmp = [val for val in a if val in b]
    print(tmp)
    # [2, 5]
    
    #方法2
    print (list(set(a).intersection(set(b))))
    
    #并集
    print (list(set(a).union(set(b))))
    
    #差集
    print (list(set(b).difference(set(a)))) # b中有而a中没有的
    print (list(set(a).difference(set(b)))) # a中有而b中没有的
    

    相关文章

      网友评论

          本文标题:【Python_perl】列表_数组求并集,交集,补集

          本文链接:https://www.haomeiwen.com/subject/negqlctx.html