递归导致列表IndexError



我想:

1 -生成一个数字列表(特别是RGB颜色);

2 -从上述列表中获取一个随机数;

3 -选择列表中离这个随机数足够远的数;

4 -从这个新列表中获得一个新的随机数。

冲洗并重复k - 1次。

这是一个MWE:

import math
import random
import seaborn as sns
num_list = list(sns.color_palette('rainbow', 10))
base_num = random.choice(num_list)

def distant_numbers(base_num, num_list, dist):

selectables = []
for num in num_list:
if math.dist(base_num, num) >= dist:
selectables.append(num)

new_base_num = random.choice(selectables)

return distant_numbers(new_base_num, selectables, dist)

,

for k in range(3):
print(distant_numbers(base_num, num_list, 0.1))

给出IndexError: list index out of range.

您应该尝试这样做:

def distant_numbers(base_num, num_list, dist, k):
if k == 0 or len(num_list) < 2:
return base_num
selectables = []
for num in num_list:
if math.dist(base_num, num) >= dist:
selectables.append(num)
new_base_num = random.choice(selectables)
return distant_numbers(new_base_num, selectables, dist, k-1)

然后像下面这样调用函数:

for k in range(3):
print(distant_numbers(base_num, num_list, 0.1, k))

你的代码的问题是函数"distant_number "在没有任何停止点的情况下继续调用自己,从而导致无限循环。这导致了"selectables";列表为空,并且在尝试从中选择随机数时出现错误。要解决这个问题,可以在函数中添加一个退出点,它返回"new_base_num"如果';selectables ';列表长度小于2。此外,您还可以通过包含一个参数来跟踪递归计数,从而限制函数调用自身的次数。

最新更新