【问题标题】:IndexError: list index out of range when try to start range from 1IndexError:尝试从 1 开始时,列表索引超出范围
【发布时间】:2016-11-02 16:41:20
【问题描述】:

我有以下工作代码。

b=4
c=4
mylist = []
for s in range(b):
    mylist.append([])
    for g in range(c):
        mylist[s].append(0)       
print mylist

给出以下输出。

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

但是根据我的要求,我想从第一个元素开始范围。因此我写了如下代码:

b=4
c=4
mylist = []
for s in range(1,b):
    mylist.append([])
    for g in range(1,c):
        mylist[s].append(0)       
print mylist

但这给了我错误

IndexError: list index out of range

我不明白为什么。如果您知道原因,请说明。

谢谢。

【问题讨论】:

  • 嗯,您正在尝试访问 1 元素列表的第二个元素。你在做[[]][1]。
  • “我想从第一个元素开始范围”:这就是你正在做的,零索引。你能举一个你想要的输出的例子吗?
  • 在我看来,您想创建一个包含零的列表,但希望该列表从索引 1 开始说明。对吗?

标签: python list


【解决方案1】:

列表从零开始,第一个附加总是创建l[0]。您需要修复索引;

b=4
c=4
mylist = []
for s in range(1,b):
    mylist.append([])
    for g in range(1,c):
        mylist[s-1].append(0)   # have to subtract 1 to get back to zero-based index    
print mylist

你的输出看起来像这样;

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

【讨论】:

    【解决方案2】:
    for s in range(1,b):
        mylist.append([])
        for g in range(1,c):
            mylist[s].append(0) 
    

    在此循环中,您将一个空列表附加到 mylist。 mylist 因此只有一个元素,但在第二个循环中,当s == 1 时,您尝试访问mylist[1]。这就是您收到索引错误的原因。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      我们知道 python 列表从 0 开始。 您可以在索引 0 处添加一个虚拟对象以从 1 开始,然后在末尾弹出它

      你的代码一定是这样的

       b=4
       c=4
       mylist = ['dummy']
           for s in range(1,b):
                 mylist.append([])
                 for g in range(1,c):
                       mylist[s].append(0) 
       mylist.pop(0)
       print mylist
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-12
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 2011-10-31
        • 2015-06-26
        相关资源
        最近更新 更多