gpt4 book ai didi

python - 查找并替换列表中彼此在某一范围内的数字

转载 作者:行者123 更新时间:2023-12-01 01:46:56 25 4
gpt4 key购买 nike

这里是初学者,所以答案可能非常明显(编辑后的代码希望比我的意大利面条代码更好)...

我有一个包含五个数字的列表。

my_list = [-197, -198, -193, -87, -192]

我需要找到彼此在 10 范围内的所有数字。 IE。 -197、-198、-193 和 -192 都属于该类别。

我需要用其他号码替换这些罪魁祸首号码。

这是我尝试实现此目的的代码:

from random import randint, choice

my_list = [-197, -198, -193, -87, -192]

n = len(my_list)
for i in range(n):
for y in my_list[i+1:]:
if abs(my_list[i] - y) <= 10:
mylist[i] = randint(-275, 275)

但是(!),有时(这是可以理解的),会得到这样的结果:

my_list = [-110, -110, -64, -87, -192]

-110 和 -110 仍然在彼此 10 的范围内(在这种情况下,完全相同)。

如何防止这种情况发生?

最佳答案

您的问题是,新的替换号码可能与任何之前的号码相差 10 以内。处理这个问题的明显方法是对照所有之前的数字检查新数字。

这意味着您需要对所有先前的数字进行另一个循环。这与您在 my_list[i+1:] 上的循环几乎相同,除了 my_list[:i-1] 在以下情况下会做错误的事情: i 为 0。

您需要围绕该问题进行第二次循环,因为您需要不断尝试,直到找到可接受的值。

为了避免在右侧再嵌套两个级别,直到屏幕上几乎没有空间容纳任何内容,让我们将其重构为一个函数:

def tooclose(lst, n):
for val in lst:
if abs(val - n) <= 10:
return True
return False

for i in range(n):
for y in my_list[i+1:]:
if abs(my_list[i] - y) <= 10:
while True:
newval = randint(-275, 275)
if i==0 or not tooclose(my_list[:i-1]. newval):
break
my_list[i] = newval

关于python - 查找并替换列表中彼此在某一范围内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51217149/

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