如何修复代码以解决此难题?(Python)

如何修复代码以解决此难题?(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:

这是我正在解决的难题的图表: 其中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:
           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]