如何确定集合是否包含Python中的另一个集合

时间:2017-01-07 04:00:57

标签: python-2.7

如果有效数字的数量不完全匹配,如何检查另一组中是否包含一组?例如,我想知道set s2中是否包含set s1(我希望它是):

>>> s1 = set(['1', '2', '3'])
>>> s2 = set(['1.000', '2.000', '3.000', '4.0000'])
>>> s1 in s2
False

但是从

开始
>>> '1' in '1.000'
True
>>> '2' in '2.000'
True
>>> '3' in '3.0000'
True
>>> '4' in '4.000'
True

我不明白为什么Python不认为set s1在set s2中,因为很明显它认为s1的每个元素都包含在set s2的元素中。

3 个答案:

答案 0 :(得分:3)

使用字符串操作来处理数字是一个坏主意。相反,您应该将数字转换为数字类型,例如floatdecimal.Decimal,以便它们的行为与实际数字相同。然后,您可以将它们舍入到适当的精度,并以通常的方式比较它们(或它们的集合)。如果你只关心尾随零,你甚至不需要回合。

例如,如果您认为两位精度足够好(并且您不介意float是二进制值,可能无法准确表示您输入的十进制数字):

s1 = set(['1', '2', '3'])
s2 = set(['1.000', '2.000', '3.000', '4.0000'])

rounded_s1 = set(round(float(i), 2) for i in s1)
rounded_s2 = set(round(float(i), 2) for i in s2)

print(rounded_s1.issubset(rounded_s2))

答案 1 :(得分:0)

实际上,这并不相同,因为' 1'不等于' 1.000'你可以看到' 1'属于' 1.000'。他们是不同的角色 试试这个

s1 = set(['1.000', '2.000', '3.000'])
s2 = set(['1.000', '2.000', '3.000', '4.0000'])
print (s1.issubset(s2))
if('1'=='1.000'):
   print ("ok")

这是没有单一报价的正确的

  s1 = set([1,2,3])
  s2 = set([1.000, 2.000, 3.000, 4.0000])
  print (s1.issubset(s2))

答案 2 :(得分:-1)

您需要混合使用all()any()

>>> all(any(s1_i in s2_i for s2_i in s2) for s1_i in s1)
True

all()确保s1中的每个项目都包含在s2中。这些规则以any()编程方式定义。它会查看该项目是否包含在s2

中的任何项目中

由于all()any()都是短路的,因此这是找到答案的一种非常有效的方法。