[英]How can I make my output group all similar numbers into a specific number of groups?
[英]How can I make my output group all numbers together?
所以我试图找到如何将相似的数字分组到不同的列表中。 我尝试查看一些来源,例如( Python 中的分组/聚类数字),但所有这些都需要导入 itertools 并使用 itertools.groupby,我不想要它,因为我不想使用内置函数。
到目前为止,这是我的代码。
def n_length_combo(lst, n):
if n == 0:
return [[]]
l = []
for i in range(0, len(lst)):
m = lst[i]
remLst = lst[i + 1:]
for p in n_length_combo(remLst, n - 1):
l.append([m] + p)
return l
print(n_length_combo(lst=[1,1,76,45,45,4,5,99,105],n=3))
编辑: n: int
表示一个列表中允许的组数,因此如果 n 为 3,则数字将分组为 (x,...), (x,....) (x,...) ) 如果 n = 2,数字将被分组在 (x,..),(x,...)
但是,我的代码在n
元素的列表中打印出所有可能的组合。 但它不会将数字组合在一起。 所以我想要的是:例如,如果输入是
[10,12,45,47,91,98,99]
如果 n = 2,输出将是
[10,12,45,47] [91,98,99]
如果 n = 3,输出将是
[10,12] [45,47] [91,98,99]
我应该对我的代码进行哪些更改?
假设n
是您想要的组/分区数:
import math
def partition(nums, n):
partitions = [[] for _ in range(n)]
min_, max_ = min(nums), max(nums)
r = max_ - min_ # range of the numbers
s = math.ceil(r / n) # size of each bucket/partition
for num in nums:
p = (num - min_) // s
partitions[p].append(num)
return partitions
nums = [10,12,45,47,91,98,99]
print(partition(nums, 2))
print(partition(nums, 3))
印刷:
[[10, 12, 45, 47], [91, 98, 99]]
[[10, 12], [45, 47], [91, 98, 99]]
您正在尝试将一维数组转换为二维数组。 请原谅命名不当的变量,但总体思路如下。 它相当容易解析,但基本上我们要做的是首先找出二维矩阵的行大小,给定一维矩阵的长度和所需的列数。 如果这不能完全划分,我们将向行添加一个。 然后我们创建一个循环来计算列数,并在其中创建另一个循环来计算行数。 我们将二维数组的当前位置 (r,c) 映射到一维数组的索引。 如果数组索引越界,我们放 0(或 None 或 -1 或什么都不做),否则我们将值从一维数组复制到二维数组。 好吧,实际上我们在 cols 循环中创建了一个一维数组,当循环完成时,我们将其附加到 lst2 数组。
def transform2d(lst, cols):
size = len(lst)
rows = int(size/cols)
if cols * rows < size:
rows+=1
lst2 = []
for c in range(cols):
a2 = []
for r in range(rows):
i = c*cols + r
if i < size:
a2.append(lst[i])
else:
a2.append(0) # default value
lst2.append(a2)
return lst2
i = [10,12,45,47,91,98,99]
r = transform2d(i, 2)
print(r)
r = transform2d(i, 3)
print(r)
除了为二维数组中的额外元素打印 0 之外,输出与您指定的一样。 这可以通过删除执行此操作的 else 来更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.