【问题标题】:Grouping integers by set membership in Python在 Python 中按集合成员资格对整数进行分组
【发布时间】:2011-08-27 19:24:55
【问题描述】:

在 Python 中工作,给定范围 range(s,n) 中的 N 组整数的列表,我如何构建一个列表,根据它们的集合成员资格对所有这些整数进行分组?一个例子真的可以帮助我在这里解释:

示例输入(N=2 组):

integerRange = range(0,13)
input = [set([0,1,2,3,7,8,9,12]), set([0,1,2,3,4,5,6,12])]

期望的输出:

out = [set([10,11]), set([4,5,6]), set([7,8,9]), set([0,1,2,3,12])]

所以在输出中 range(s,n) 中的每个整数只出现一次,并且有 2^N 个集合。在示例中,out[0] 包含两个集合中都不存在的整数。 out[1] 包含在第二个集合中但不是第一个集合中的整数。 out[2] 包含第一个集合中的整数,但不包含第二个集合中的整数。最后 out[3] 包含两个集合共有的整数。

对于 2 套来说,这相当容易……但我对 N 套感到难过。有人知道吗?

【问题讨论】:

    标签: python list integer set grouping


    【解决方案1】:

    我什至想到这个效率就感到畏缩,但它非常紧凑:

     out = [set(range(x, y))]
     for in_set in input:
        out_diff = [out_set - in_set for out_set in out]
        out_union = [out_set & in_set for out_set in out]
        out = out_diff + out_union
    

    【讨论】:

    • 有效! (它比我想象的要优雅得多)。我花了更长的时间才弄清楚它是如何工作的,而不是你发布它!我的数据集相当小,所以效率应该不是问题。谢谢:)
    • @Spacecookies 我花了更长的时间才弄清楚你在问什么,而不是想出一个算法。 :P Python 让集合操作变得非常容易。
    猜你喜欢
    • 2013-11-22
    • 2011-04-10
    • 1970-01-01
    • 2018-09-17
    • 2015-11-20
    • 2016-09-19
    • 2017-10-04
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多