【Python_perl】列表_数组求并集,交集,补集
2019-08-11 本文已影响0人
Silver_42ac
为了方便对应这里给出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中没有的