【问题标题】:How can I separate the numbers with the highest difference into different groups如何将差异最大的数字分成不同的组
【发布时间】:2021-11-08 08:43:11
【问题描述】:

所以我写了这段代码来找出数字之间的差异。

def partition(lst: list):
    f = []
    l = sorted(f)
    for i in range(len(lst)):
        if i < len(lst)-1:
            diff = lst[i+1] - lst[i]
            l.append(diff)
        else:
            return f

它可以工作,但现在我想创建另一个函数grouping 来分隔两个数字之间差异最大的列表。例如,如果这是我的清单

[1,3,5,7,12,14,15]

运行partition(lst)后,我得到了

[2, 2, 2, 5, 2, 1]

所以现在我想让grouping(lst, n) 分隔出差异最大的列表,也就是5,所以我想让grouping 返回

[(1,3,5,7),(12,14,15)]

此外,在grouping(lst,n) 中,还有一个int n,它将确定需要多少个分组。所以基本上,只要 n

为了理解我的意思,所以基本上如果n = 1,我希望grouping(lst,n) 将出现最大差异的数字分开。

如果n = 2grouping(lst,n) 应该分隔出现前两个最大差异的数字。

如果n = 3, 'grouping(lst,n) 应该分开出现前 3 个最大差异的数字。等等..

这是我目前的代码,包括grouping(lst,n)

def partition(lst: list):
    f = []
    for i in range(len(lst)):
        if i < len(lst)-1:
            diff = lst[i+1] - lst[i]
            f.append(diff)
        else:
            return f
print(partition([1,3,5,7,12,14,15]))
def grouping(lst: list, n):
    for x in lst:
        if partition(x) == max(partition(lst)):
            lst.append(x)

我应该在grouping(lst,n) 下写什么才能使它正确?

【问题讨论】:

  • 你好,同样的问题在这里stackoverflow.com/questions/54269966/…你可以使用这种方法
  • 不是同一个问题。 Bruffff 提出的问题似乎更复杂,因为向列表中添加元素可能会完全改变您拆分它的位置。
  • @MehrdadDolatabadi 是的,这个问题使用了 itertools,我想避免使用它:)。
  • grouping([1,3,5,7,12,14,15], 3) 的预期输出是什么?
  • 预期输出将是 [(1,3,) (5,7) (14,15)]。如果所有的差异都相同,只需将中间的数字分开即可。

标签: python list tuples


【解决方案1】:

这里是我对您问题的回答:

import numpy

def grouping(input_user, n):
    diff = numpy.diff(input_user)
    heighests = numpy.sort(diff)[-n:]
    results = []
    result = [input_user[0]]
    index = 0
    for i, cell in enumerate(input_user[1:]):
        if diff[i] in heighests:
            heighests = numpy.delete(heighests, numpy.where(heighests == diff[i])[0][0])
            result.append(cell)
            results.append(result)
            result = []
        result.append(cell)
    if result:
        results.append(result)
    return results

for n in range(1, 4):
    print(f"n={n}: {grouping(numpy.array([1,3,5,7,12,14,15]), n)}")

结果:

n=1: [[1, 3, 5, 7, 12], [14, 15]]                                                                                       
n=2: [[1, 3], [5, 7, 12], [14, 15]]                                                                                     
n=3: [[1, 3], [5], [7, 12], [14, 15]] 

【讨论】:

  • 如果您需要使用 n=3 进行拆分,您如何进行分组?
  • heighests = numpy.sort(diff)[-2:] 你改变了 2 in 3
  • heighests = numpy.sort(diff)[-3:] 输出[[1], [3, 5, 7, 12, 14, 15]]
  • 请不要使用input作为变量!已经是函数了!
  • 对我来说似乎很好,但由于 OP 没有指定在相同差异的情况下如何拆分(3-1 = 5-3 = 7-5),我们不知道他想要分裂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 2021-05-02
  • 2015-06-30
  • 2010-09-13
  • 2021-04-11
  • 1970-01-01
  • 2017-03-23
相关资源
最近更新 更多