【问题标题】:Create a multiset from a Set X从 Set X 创建多重集
【发布时间】:2018-10-03 20:38:17
【问题描述】:

在一个Multiset中允许有多个元素

例如。如果 X(正常集)= {0,2,4,7,10},则 ΔX(多集)= {2,2,3,3,4,5,6,7,8,10}。

ΔX 表示 X 中点之间的所有 ????(N 2) 成对距离的多重集

我怎样才能用 Python 写这个?

我创建了一个列表 X,但我不知道如何将所有差异放在另一个列表中并对其进行排序。

我希望你能帮助我。

【问题讨论】:

  • 欢迎来到 Stack Overflow!您似乎在要求某人为您编写一些代码。 Stack Overflow 是一个问答网站,而不是代码编写服务。请see here学习如何写出有效的问题。

标签: python multiset


【解决方案1】:

基本上只有一行。

import itertools

s = {0,2,4,7,10}
sorted([abs(a-b) for (a,b) in itertools.combinations(s,2)])

【讨论】:

    【解决方案2】:

    你可以使用itertools

    import itertools
    
    s = {0,2,4,7,10}
    k = itertools.combinations(s,2)
    distance = []
    l = list(k)
    for p in l:
        distance.append(abs(p[1]-p[0]))
    print(sorted(distance))
    

    【讨论】:

    • @pault 现在可以了
    【解决方案3】:

    一种简单的方法是将您的集合转换为列表,对其进行排序,然后使用双 for 循环来计算差异:

    X = {0,2,4,7,10}  # original set
    sorted_X = sorted(list(X))
    diffs = []
    for i, a in enumerate(sorted_X):
        for j, b in enumerate(sorted_X):
            if j > i:
                diffs.append(b-a)           
    print(diffs)
    #[2, 4, 7, 10, 2, 5, 8, 3, 6, 3]
    

    如果您还希望对差异进行排序:

    print(sorted(diffs))
    #[2, 2, 3, 3, 4, 5, 6, 7, 8, 10]
    

    在这种情况下可以使用的另一个选项是使用itertools.product

    from itertools import product
    print(sorted([(y-x) for x,y in product(sorted_X, sorted_X) if y>x]))
    #[2, 2, 3, 3, 4, 5, 6, 7, 8, 10]
    

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2021-09-15
      • 2023-04-02
      • 2019-05-27
      相关资源
      最近更新 更多