gpt4 book ai didi

python - 根据端点递归划分列表

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:09 24 4
gpt4 key购买 nike

这是我正在尝试做的事情。拿 list :

list1 = [0,2]

这个列表有起点 0 和终点 2。现在,如果我们取这个列表的中点,列表将变成:

list1 = [0,1,2]

现在,如果我们再次递归拆分列表(取中点的中点),列表将变为:

list1 = [0,.5,1,1.5,2]

我需要一个函数来生成这样的列表,最好是通过跟踪一个变量。因此,例如,假设有一个变量 n,用于跟踪某事。当 n = 1 时,列表可能是 [0,1,2],当 n = 2 时,列表可能是 [0,.5,1,1.5,2],我将增加值以保持跟踪我将列表划分了多少次。

我知道您需要为此使用递归,但我不确定如何实现它。

应该是这样的:

def recursive(list1,a,b,n):
"""list 1 is a list of values, a and b are the start
and end points of the list, and n is an int representing
how many times the list needs to be divided"""
int mid = len(list1)//2
stuff

有人可以帮我写这个函数吗?不是作业,我正在处理的项目的一部分涉及使用网格分析将矩形划分为多个部分。

这是我目前所拥有的:

def recursive(a,b,list1,n):
w = b - a
mid = a + w / 2
left = list1[0:mid]
right = list1[mid:len(list1)-1]
return recursive(a,mid,list1,n) + mid + recursive(mid,b,list1,n)

但我不确定如何将 n 合并到这里。

注意:list1 最初是 [a,b] - 我只是手动输入它,但我确信有更好的方法来做到这一点。

最佳答案

您已经生成了一些有趣的答案。这里还有两个。

我第一次使用迭代器来避免对列表进行切片并且是递归的,因为这似乎是最自然的表述。

def list_split(orig, n):
if not n:
return orig
else:
li = iter(orig)
this = next(li)
result = [this]
for nxt in li:
result.extend([(this+nxt)/2, nxt])
this = nxt
return list_split(result, n-1)

for i in range(6):
print(i, list_split([0, 2], i))

这打印

0 [0, 2]
1 [0, 1.0, 2]
2 [0, 0.5, 1.0, 1.5, 2]
3 [0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2]
4 [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0, 1.125, 1.25, 1.375, 1.5, 1.625, 1.75, 1.875, 2]
5 [0, 0.0625, 0.125, 0.1875, 0.25, 0.3125, 0.375, 0.4375, 0.5, 0.5625, 0.625, 0.6875, 0.75, 0.8125, 0.875, 0.9375, 1.0, 1.0625, 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, 1.625, 1.6875, 1.75, 1.8125, 1.875, 1.9375, 2]

我的第二个观点是基于这样的观察:如果您总是从两个元素开始,则递归是不必要的。假设这些元素是 mnmx。在拆分操作的 N 应用程序之后,您将在其中包含 2^N+1 个元素,因此元素之间的数值距离将为 (mx-mn)/(2**N).

鉴于此信息,因此应该可以确定地计算数组的元素,或者更容易 use numpy.linspace像这样:

def grid(emin, emax, N):
return numpy.linspace(emin, emax, 2**N+1)

这似乎给出了相同的答案,从长远来看可能最适合您。

关于python - 根据端点递归划分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776218/

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