如何修复代码以解决此难题?(Python)
这是我正在解决的难题的图表: 其中A、B、C、D是四个数字,分别为0或1,alphas是一些随机常数(可以是正的或负的,但忽略它们为0时的情况)。目标是确定给定alpha随机数组的列表[A,B,C,D]。以下是一些规则:如何修复代码以解决此难题?(Python),python,list,index-error,Python,List,Index Error,这是我正在解决的难题的图表: 其中A、B、C、D是四个数字,分别为0或1,alphas是一些随机常数(可以是正的或负的,但忽略它们为0时的情况)。目标是确定给定alpha随机数组的列表[A,B,C,D]。以下是一些规则: 如果alpha>0,则相邻点具有不同的值。(例如:如果αA=4.5,则A、B=01或10 如果alpha发现一些气味,请查看代码: nums有3个元素长,似乎需要num=pa.argsort()[-4:][:-1] 您在其他地方也有索引问题: if i == 3:
有3个元素长,似乎需要nums
num=pa.argsort()[-4:][:-1]
if i == 3:
num[i+1] = num[0]
元素4
不在数组中
我个人的建议是:考虑到问题的规模很小,去掉numpy
,只使用python列表
另一个观察(我花了几年时间才学会)是,对于小问题,bruteforce是可以的
这是我的bruteforce解决方案,随着时间的推移,这可以改进为执行回溯或动态编程:
随机导入
为了使事情更简单,我会考虑A=0,等等。
成对=[
(0, 1),
(1, 2),
(2, 3),
(3, 0),
]
#确保我们的清单上没有零
alphas=[(random.choice([1,-1])*random.uniform(1,10),范围(4)内n的成对[n])
打印(字母)
#按降序排序
alphas.sort(reverse=True,key=lambda n:abs(n[0]))
打印(字母[:-1])
def潜在_解决方案():
“”“潜在解决方案生成器”“”
对于范围(16)内的n:
#在二进制中,从0到15的数字覆盖了所有可能的配置
#我使用shift和masking获取每个位并返回一个列表
收益率[n>>3&1,n>>2&1,n>>1&1,n&1]
def检查(解决方案):
“”“获取候选解决方案并检查其是否正常”“”
对于字母[:-1]:
如果α<0且溶液[右]!=溶液[左]:
返回错误
elif alpha>0且解决方案[右]==解决方案[左]:
返回错误
返回真值
#寻找正确的解决方案
对于潜在_解决方案()中的解决方案:
如果检查(解决方案):
打印(解决方案)
@ombk这是我关于这一点的第二篇文章,我修复了以前的一些问题,但仍然难以计算它是否超出绝对值最高的alpha,迭代到第二个最低的alpha。只有当alpha_I具有最小绝对值时,才能违反规则1和2。这意味着我们必须“处理”按降序排列的alpha值:例如,如果alpha是4,-1,3,-2,预期的处理是a,c,d,b?@Joac谢谢你的评论!是的,没错,但我想忽略min(abs(alpha)),列表[a,c,d]在我的代码中被命名为'num:)非常感谢你的回答,这对我真的很有帮助!很高兴你发现它很有用!我刚刚发现答案翻转了alpha>0的条件,alphaLet让我来解决:)很好,我刚刚切换了'>'和'
IndexError: index 3 is out of bounds for axis 0 with size 3
alpha = [12.74921599, -8.01870123, 11.07638142, -3.51723019]
num = [0, 2, 1]
ABCD = [0, 1, 1, 0] (or [1, 0, 0, 1])
if i == 3:
num[i+1] = num[0]