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

标签 python arrays list function recursion

这是我正在尝试做的事情。 拿 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/

相关文章:

python - 编程错误 : LOB variable no longer valid after subsequent fetch

python - 路径问题(命令行)

c++ - 有什么方法可以在不知道它的大小的情况下制作一个字符数组

javascript - 比较字符串并更改行的颜色

c# - 从 C# 列表中获取对象对的最佳方法

c# - Linq:查找具有不同值但索引相同的 2 个列表的元素

python - 属性错误 : next()

python - 映射到 numpy 数组,为什么要花费更多时间?

java - 如何获取字符串数组中元素的长度(出现错误)?

c# - 在单线程中的 List.Add 期间,什么可能导致 "Destination array was not long enough"?