2014-12-19 252 views
1

我相信这是简单的,而且我看了一下这个同一主题的十几个职位,但我还是不明白为什么这是行不通的。 ..Python的多维列表 - IndexError:列表索引超出范围

banner = [[0 for i in xrange(60)] for i2 in xrange(60)] 

def load_banner(): 
    file = open('banner', 'r') 
    x = 0 
    y = 0 
    for line in file: 
     for c in line: 
      banner[x][y] = c 
      y += 1 
     x += 1 
    pprint.pprint(banner) 

非常感谢您的任何意见或建议,谢谢!

+0

因为_len(line)> len(banner [::])_。 – GLHF 2014-12-19 04:26:16

+0

我认为,到第一次,但是当我打开纳米,ctrl + c在行尾,它的57列和20行......我想这就是为什么我迷路了...... – 2014-12-19 04:26:21

+0

@ JeffreyL.Roberts你搜索每一个字符,而不是线? – GLHF 2014-12-19 04:26:57

回答

2

我猜这是因为你没有重置y变量。所以即使你所有的行少于60个字符,y也会不断增长并增长,直到达到60,然后抛出一个IndexError。

+0

让天才,我感觉迟钝 – 2014-12-19 04:28:23

+0

哈哈,我自己做这个的次数... – zehnpaard 2014-12-19 04:31:53

+0

btw我也完全支持fourtheye的解决方案,除非你以某种方式特别需要输出在一个60x60的列表中(一个稍微牵强的场景) – zehnpaard 2014-12-19 04:59:26

1

不要定义硬编码列表的大小,而是使用list.append功能,这样

banner = [] 
for row, line in enumerate(file): 
    banner.append([]) 
    for c in line: 
     banner[row].append(c) 

更好,使用列表理解,这样

banner = [[c for c in line] for line in file] 

更妙的是,使用list功能,像这样

banner = [list(line) for line in file] 

它可以这样写

with open("banner", "r") as in_file: 
    print(list(map(list, in_file))) 
+0

我仍然有几分钟才能接受答案,您的解决方案是我如何才能正常工作,但zehnpaard的其他答案也正确,我希望我可以接受这两个 – 2014-12-19 04:31:29

+0

这是一个更好的方式来编写代码,虽然另一个答案明确说明为什么你有什么不工作 – Anentropic 2014-12-19 04:47:47

+0

10我同意,Zehnpaard发现这个错误还有,他需要点=] – 2014-12-20 16:09:33

相关问题