2016-01-28 52 views
-1

如果以前已经询问过,但是我想打印名为“my_list”的列表的所有元素,我表示歉意。Python 3.4 - 范围对象索引超出范围

此代码:

my_list = range(75) 

for i in my_list: 
    print (my_list[i]) 

但这个代码...

my_list = range(1, 75) 

for i in my_list: 
    print (my_list[i]) 

...生成以下错误:IndexError:范围对象索引超出范围

哪有这是固定的?

+0

对一个序列进行迭代可以给出元素,而不是索引。此外,'range'在Python 3中返回一个范围对象,而不是一个列表。 – user2357112

+1

@ user2357112你仍然可以索引一个范围 –

+0

@AdamSmith:确实可以。这并不是一个列表,如果提问者试图对一个确实需要一个列表的范围对象做任何事情,他们会得到更多的错误。 – user2357112

回答

2

您可以遍历列表;你将索引与元素混淆在一起。下面一个你一个:

for i in my_list: 
    print (i) 

- 或 -

for i in range(len(my_list)): 
    print (my_list[i]) 

为了说明你做了什么更严重的版本,试试这个:

my_list = range(5, 15) 
print my_list 

for i in range(5, 15): 
    print (i, my_list[i]) 

输出:

[5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 
5 10 
6 11 
7 12 
8 13 
9 14 
10 
IndexError: list index out of range 
2

range(1, 75)代表数字1..74。它有索引0..73

my_list[74]会IndexError,因为最大的索引是73


正如其他答案已经提到,似乎你错误地指数值。 Python中的for foo in bar为您提供bar中的所有值,而不是索引。

enumerate是从迭代中获取索引和值的常用工具。这是一个range对象上有点傻,但你可以做到这一点:

my_list = range(1, 75) 

for i, val in enumerate(my_list): 
    print(my_list[i]) # my_list[i] == val 

enumerate(bar)本质上只是zip(range(len(bar)), bar)

+0

你还应该告诉他打印my_list [i-1]以获得正确的值 – sabbahillel

+0

@sabbahillel,这对range(x,y)'来说是不可扩展的。最好完全放弃这种方法。 –

+0

我刚刚回答了问题。然而,使用i-x将处理一般情况。 – sabbahillel

0

您正在遍历每个imy_list。你想要打印i

my_list = range(1, 75) 

for i in my_list: 
    print i 
0

这很简单,你必须编码如下。

my_list = range(0, 76) 

for i in my_list: 
    print (my_list[i]) 

把这个代码,这将清除您的IndexError:列表索引超出范围。 [已解决]

+0

您可以添加解释,以便为什么首先获取错误“IndexError”。 –