gpt4 book ai didi

python - 唯一编号代码 顺序组合

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:24 25 4
gpt4 key购买 nike

您好,我正在编写一段代码,它接收一个数字数组并返回一个组合数组。例如:

A = [5, 6, 7, 8]
B = [1, 2, 6, 7]
C = [3, 4, 6, 7, 8, 9]

当我将这些数组一一传入函数时,我得到以下结果:

ResultA = [[5, 6, 7, 8]]
ResultB = [[1, 2], [6, 7]]
ResultC = [[3, 4], [6, 7, 8, 9]]

我写下了一个非常粗略的代码可以做到这一点,但我很确定它没有经过优化。下面是我的代码:

def to_unique_numeric_combinations(number_collection: list):
if not isinstance(number_collection, list):
raise TypeError("The input must be a list of numbers")
result = []
number_dict = {}
for i in number_collection:
number_dict[i] = 0
for i in number_collection:
if number_dict[i] < 1:
res = [i]
for j in range(i + 1, max(number_collection) + 1):
if j in number_dict and number_dict[j] < 1:
number_dict[j] = 1
res.append(j)
else:
break
if len(number_collection) > 0:
result.append(res)
return result

我正在研究另一种使用 while 循环的解决方案,速度更快。下面是代码:

def with_while_loop(x):
result = []
i = 0
res = []
while i <= len(x) - 1:
j = i + 1
res.append(x[i])
if i == len(x) - 1:
result.append(res)
i += 1
elif x[i] + 1 == x[j]:
i += 1
else:
result.append(res)
res = []
i += 1
return result

我的问题是,有没有比它更好、更优化的方法?

最佳答案

我不确定性能,但你可以这样做:

def breaker(collection, sort=False):
if sort:
collection.sort()

res = []
aux = [collection[0]]

for num in collection[1:]:
if aux[-1] + 1 == num:
aux.append(num)
else:
res.append(aux)
aux = [num]

if aux:
res.append(aux)

return res

示例用法:

>>> breaker([1, 2, 5, 7, 8])
[[1, 2], [5], [7, 8]]
>>> breaker([5, 2, 1, 8, 7], sort=True)
[[1, 2], [5], [7, 8]]

希望对您有所帮助。 =)

关于python - 唯一编号代码 顺序组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com