【问题标题】:Runtime error in python:listspython中的运行时错误:列表
【发布时间】:2013-12-24 02:22:27
【问题描述】:

为什么下面的代码会给出运行时错误 请提出原因,不能像 c++ 那样对数组进行索引

t=input()
dp1=[]
dp3=[]
dp5=[]
dp7=[]
dp1[0]=0
dp3[0]=0
dp5[0]=0
dp7[0]=0
dp1[1]=1
dp3[1]=1
dp5[1]=1
dp7[1]=1
i=2
while i<=10000:
    dp1[i]=dp3[i-1]
    dp5[i]=dp7[i-1]
    dp3[i]=dp1[i-1]+dp5[i-1]
    dp7[i]=dp5[i-1]+dp3[i-1]
    i+=1
while t>0:
    n=int(raw_input())
    print dp1[n]+dp3[n]+dp5[n]+dp7[n]
    t-=1

错误信息:运行时错误时间:0.01 内存:7852 信号:-1

【问题讨论】:

  • 不,python 列表不能任意寻址。如果需要稀疏数组,请使用字典,或先初始化整个列表。
  • - 如果您询问错误,发布错误消息是有意义的。
  • 我是 python 新手,请您建议我应该如何更改上述代码以使其正常工作
  • 如果您在代码挑战网站上运行它,请先在本地运行它并给我们适当的回溯。 运行时错误消息不够

标签: python arrays python-2.7 dynamic-programming


【解决方案1】:

不,Python 列表不会自动实现索引。

如果您想要动态编程草稿板,请设置完整列表:

dp1 = [0] * 1000
dp3 = [0] * 1000
dp5 = [0] * 1000
dp7 = [0] * 1000

或使用.append():

dp1 = [0, 1]
dp3 = [0, 1]
dp5 = [0, 1]
dp7 = [0, 1]

for i in xrange(2, 10001):
    dp1.append(dp3[i - 1])
    dp5.append(dp7[i - 1])
    dp3.append(dp1[i - 1] + dp5[i - 1])
    dp7.append(dp5[i - 1] + dp3[i - 1])

t = input()
for _ in xrange(int(t)):
    n = int(raw_input())
    print dp1[n] + dp3[n] + dp5[n] + dp7[n]

这里我使用for 循环覆盖xrange() 而不是while 循环来遍历it

【讨论】:

  • 好的!还有其他方法吗?(只是好奇,虽然你说的很简单)谢谢
【解决方案2】:
dp1[i]=dp3[i-1]

尝试为 i>2 读取 dp3 中不存在的元素。出问题的可能是从 2 到 10000 的循环。

【讨论】:

    【解决方案3】:

    不确定这是不是你想要的。

    #! /usr/bin/python2.7
    
    t=input()
    
    dp1={0: 0, 1: 1}
    dp3={0: 0, 1: 1}
    dp5={0: 0, 1: 1}
    dp7={0: 0, 1: 1}
    for i in range (2, 10001):
        dp1[i]=dp3[i-1]
        dp5[i]=dp7[i-1]
        dp3[i]=dp1[i-1]+dp5[i-1]
        dp7[i]=dp5[i-1]+dp3[i-1]
    
    while t>0:
        n=input()
        print dp1[n]+dp3[n]+dp5[n]+dp7[n]
        t-=1
    

    【讨论】:

    • 请注意,i 的范围没有间隙,因此这不是稀疏矩阵。列表是这里更好的选择。
    • @MartijnPieters 我想是的。但也许 OP 的下一个问题是数据稀疏,现在他看到了一个 dict...
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多