所以我試圖找到如何將相似的數字分組到不同的串列中。我嘗試查看一些來源,例如(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]
我應該對我的代碼進行哪些更改?
uj5u.com熱心網友回復:
假設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]]
uj5u.com熱心網友回復:
您正在嘗試將一維陣列轉換為二維陣列。請原諒命名不當的變數,但總體思路如下。決議相當容易,但基本上我們要做的是首先找出二維矩陣的行大小,給定一維矩陣的長度和所需的列數。如果這不能完全劃分,我們將向行添加一個。然后我們創建一個回圈來計算列數,并在其中創建另一個回圈來計算行數。我們將二維陣列的當前位置 (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 來更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353110.html
下一篇:洗掉Julia串列中的空字串
